Neo4j Cypher查询排序顺序

Neo4j Cypher查询排序顺序,neo4j,cypher,Neo4j,Cypher,在我的Neo4j/SDN项目中,我有以下模式: 包含子决策和特征实体的决策实体 每对子决策和特征可以分配一个值节点 例如,我创建了3个子决策节点 childDecision1 childDecision2 childDecision3 还有一个特点: 特征1 我已将以下值分配给以下对: childDecision2 + characterisitc1 = Value(Integer 10) childDecision3 + characterisitc1 = Value(Integer 25)

在我的Neo4j/SDN项目中,我有以下模式:

包含子决策和特征实体的决策实体

每对子决策和特征可以分配一个值节点

例如,我创建了3个子决策节点

childDecision1
childDecision2
childDecision3
还有一个特点:

特征1

我已将以下值分配给以下对:

childDecision2 + characterisitc1 = Value(Integer 10)
childDecision3 + characterisitc1 = Value(Integer 25)
我正在按SORTVALUE 88.value ASC的顺序执行以下密码查询:

到目前为止一切正常

现在我要将排序顺序方向从ASC更改为DESC:

现在我不明白为什么childDecision1排在第一位,但我希望childDecision3排在第一位

请您帮助解释/修复此行为好吗?

因为:

因此,您需要知道排序的最小可能值。例如,如果所有值都不小于零

WITH [1, 0, 2, NULL, 4] AS CS
UNWIND RANGE(0, size(CS)-1) as i
RETURN i, 
       CASE WHEN CS[i] IS NULL THEN -1 ELSE CS[i] END AS sortValue
ORDER BY sortValue DESC

谢谢你的回答。在执行降序排序时,是否有机会重新配置Neo4j以便最后返回NULL?我有一个很重的查询,我认为附加条件不是一个很好的选择。您可以更改CypherOrderability.compare函数[]的代码,或者这是请求新功能的一个很好的理由。谢谢!创建了一个github问题
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
childDecision1 (no value provided)
childDecision3 (Value = 25)
childDecision2 (Value = 10)
WITH [1, 0, 2, NULL, 4] AS CS
UNWIND RANGE(0, size(CS)-1) as i
RETURN i, 
       CASE WHEN CS[i] IS NULL THEN -1 ELSE CS[i] END AS sortValue
ORDER BY sortValue DESC