는 나는 다음과 같은 모드가 있습니다.Neo4j 사이퍼 쿼리 정렬 순서
각 쌍의 자식 Decision
과 Characteristic
에는 값 노드가 할당 될 수 있습니다.
childDecision1
childDecision2
childDecision3
한 Characteristic
를 들어, 3 자녀 Decision
노드를 만든
:
childDecision2 + characterisitc1 = Value(Integer 10)
childDecision3 + characterisitc1 = Value(Integer 25)
:
characterisitc1
나는 다음과 같은 쌍의 값 다음 할당
나는 실행 중입니다. (O RDER BY sortValue88.value ASC
와) 다음 사이퍼 쿼리
MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User)
WHERE id(parentD) = {decisionId}
OPTIONAL MATCH (childD)<-[:SET_FOR]->(sortValue88:Value)-[:SET_ON]->(sortCharacteristic88:Characteristic)
WHERE id(sortCharacteristic88) = 88
WITH ru, u, childD , sortValue88
ORDER BY sortValue88.value ASC SKIP 0 LIMIT 100
RETURN ru, u, childD AS decision, [ (parentD)<-[:DEFINED_BY]-(entity)<-[:COMMENTED_ON]-(comg:CommentGroup)-[:COMMENTED_FOR]->(childD) | {entityId: id(entity), types: labels(entity), totalComments: toInt(comg.totalComments)} ] AS commentGroups, [ (parentD)<-[:DEFINED_BY]-(c1:Criterion)<-[:VOTED_ON]-(vg1:VoteGroup)-[:VOTED_FOR]->(childD) | {criterionId: id(c1), weight: vg1.avgVotesWeight, totalVotes: toInt(vg1.totalVotes)} ] AS weightedCriteria, [ (parentD)<-[:DEFINED_BY]-(ch1:Characteristic)<-[:SET_ON]-(v1:Value)-[:SET_FOR]->(childD) | {characteristicId: id(ch1), value: v1.value, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics
결과로 나는이 :
childDecision2 (Value = 10)
childDecision3 (Value = 25)
childDecision1 (no value provided)
지금까지 모든 것이 잘 작동합니다.
는 지금은 ASC
에서 DESC
에 정렬 순서 방향을 변경하려고 해요 :
MATCH (parentD)-[:CONTAINS]->(childD:Decision)-[ru:CREATED_BY]->(u:User)
WHERE id(parentD) = {decisionId}
OPTIONAL MATCH (childD)<-[:SET_FOR]->(sortValue88:Value)-[:SET_ON]->(sortCharacteristic88:Characteristic)
WHERE id(sortCharacteristic88) = 88
WITH ru, u, childD , sortValue88
ORDER BY sortValue88.value DESC SKIP 0 LIMIT 100
RETURN ru, u, childD AS decision, [ (parentD)<-[:DEFINED_BY]-(entity)<-[:COMMENTED_ON]-(comg:CommentGroup)-[:COMMENTED_FOR]->(childD) | {entityId: id(entity), types: labels(entity), totalComments: toInt(comg.totalComments)} ] AS commentGroups, [ (parentD)<-[:DEFINED_BY]-(c1:Criterion)<-[:VOTED_ON]-(vg1:VoteGroup)-[:VOTED_FOR]->(childD) | {criterionId: id(c1), weight: vg1.avgVotesWeight, totalVotes: toInt(vg1.totalVotes)} ] AS weightedCriteria, [ (parentD)<-[:DEFINED_BY]-(ch1:Characteristic)<-[:SET_ON]-(v1:Value)-[:SET_FOR]->(childD) | {characteristicId: id(ch1), value: v1.value, valueType: ch1.valueType, visualMode: ch1.visualMode} ] AS valuedCharacteristics
결과로 내가 가진 :
childDecision1 (no value provided)
childDecision3 (Value = 25)
childDecision2 (Value = 10)
을 지금 내가 왜 이해가 안 돼요 childDecision1은 첫 번째 위치를 유지하지만 대신에 childDecision3이 필요합니다.
이 문제를 설명하거나 수정 하시겠습니까?
답변 해 주셔서 감사합니다. 내림차순 정렬을 할 때 마지막으로 NULL을 반환하기 위해 Neo4j를 다시 구성 할 수 있습니까? 나는 꽤 무거운 질의를 가지고 있고 내 의견에 추가 조건은 꽤 좋은 선택이 아니다. – alexanoid
'CypherOrderability.compare' 함수의 코드를 바꿀 수있다 [https://github.com/neo4j/neo4j/blob/862d62b2f2dc2221e48476ac1f6c93c91d7d6015/community/cypher /cypher-compiler-3.2/src/main/java/org/neo4j/cypher/internal/compiler/v3_2/common/CypherOrderability.java#L105] 또는 새 기능을 요청하는 것이 좋은 이유입니다. –
감사합니다. github 문제를 만들었습니다. https://github.com/neo4j/neo4j/issues/9213 – alexanoid