如何在不知道属性集长度的情况下仅比较Neo4j中多个节点的属性集中的最后一个元素?

时间:2016-07-21 07:45:42

标签: neo4j neo4j-cql

在Neo4j中,我有多个节点,其中包含多个长度的属性集。

例如,一组节点

    (id:PERSON{userid:0, education_school_id[21,25,29]})
    (id:PERSON{userid:1, education_school_id[21]})
    (id:PERSON{userid:2, education_school_id[21,25]})
    (id:PERSON{userid:3, education_school_id[21,25,27]})
    (id:PERSON{userid:4, education_school_id[21,25,66]})
    (id:PERSON{userid:5, education_school_id[21,25,27]})
    (id:PERSON{userid:6, education_school_id[21,25,29,43,22]})
    (id:PERSON{userid:7, education_school_id[21,22]})
    (id:PERSON{userid:8, education_school_id[21,25]})
    (id:PERSON{userid:9, education_school_id[21,25,27,24,32]})
    (id:PERSON{userid:10, education_school_id[21,25,66,29]})
    (id:PERSON{userid:11, education_school_id[21,25,44]})

现在我想要一个 cypher查询语句,它只比较所有属性集的最后一个属性,并根据用户ID对节点进行分组,如下所示

29    0,10
21    1
25    2,8
32    9
44    10
22    6,7
27    3,5
66    4 

[订单并不重要]

这有点像与数组array[length-1]进行比较。

我不知道个别名单的长度。

目前我正在使用,

match(n) where  exists(n.education_school_id) return  n.education_school_id, collect(n.userid) ;

但是,这会按属性集整体对节点进行分组。

任何帮助将不胜感激。

另一个注意事项:我的很多问题最近都被贬低了。如果有人想要投票,请随意这样做,但要留下一些建设性的批评。我尽量使我的问题尽可能接近网站的规则。尽管我付出了很多努力,但仍然会向我提出错误提示。

1 个答案:

答案 0 :(得分:1)

您需要last()功能。

我没有投票,但你已经在文档中发布了一些问题,就像这个问题一样。这不是一个复杂的问题,你可以自己找到它,它并不像你在尝试那样,这就是SO的预期。有我已经链接到的开发者手册,还有Cypher参考卡,其中List Expressions section所有内容都是浓缩形式。