は、私は、次のモードがあります。のNeo4jサイファークエリのソート順
子の各ペアDecision
とCharacteristic
には、値ノードが割り当てられます。
Decision
ノード、例えば
childDecision1
childDecision2
childDecision3
と1 Characteristic
作成した
:私は、次のペアに次の値を割り当てた
characterisitc1
を:
childDecision2 + characterisitc1 = Value(Integer 10)
childDecision3 + characterisitc1 = Value(Integer 25)
私は実行しています(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)
これまでのところ、すべてが正常に動作します。私が持っている結果として
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
:今私はASC
からDESC
にソート順方向を変更するつもりです
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