根据neo4j中的属性值对节点进行排序

时间:2013-10-23 05:58:16

标签: neo4j cypher

基本上我想在各个节点之间进行排序并返回一个最新的,其属性为true ..但如果不存在true,我应该得到具有false属性的最新节点。
例如
nodeA - >拥有重命名值的属性为 true
nodeB - >财产重命名值为 false

现在的情况是,可能有n个节点的属性重命名 true false ,我想要最新的一个(节点还具有以毫秒格式表示的时间属性,如果不是真,则属性为true,然后是最新的false。

有没有办法用cypher查询来实现这个目的? 感谢

2 个答案:

答案 0 :(得分:1)

如果我正确理解了您的问题,您需要具有属性的最新节点"重命名" " true"的值,然后您可以先按属性排序节点"重命名"然后属性"时间"按降序排列,并取第一个,

Match somenode:Something
Return somenode
Order by somenode.renamed DESC, somenode.time DESC 
limit 1

如果有属性的节点"重命名" " true"的值,那么第一个必须是所有节点中最新的一个,其值为" true&#34 ;;如果没有值为" true"的节点,则第一个节点必须是所有节点中的最新节点,其值为" false"。

答案 1 :(得分:-1)

START a=node(*) 
MATCH p=a-[*1..]->b 
WHERE ALL (x IN nodes(p) 
           WHERE x.renamed=true OR (id(x)=id(b) AND x.renamed=false)) 
RETURN p

除最后一个b之外的所有节点都必须有renamed=false,而最后一个b必须有renamed=false