Neo4j一起收集和排序

Neo4j一起收集和排序,neo4j,cypher,Neo4j,Cypher,在Neo4j中,COLLECT用于查找节点的所有相邻节点。假设我们要按排序顺序查找节点的所有相邻节点 我尝试了下面的方法,但没有成功 MATCH (ee:RECORD)-[:TAGGEDWITH]->(p:TAG)<-[:PARTOF]-(v:TAGTYPE) RETURN p.tag_id as id, COLLECT( DISTINCT ee.record_id) AS Records ORDER BY ee.record_id, p.NAME AS name,

在Neo4j中,COLLECT用于查找节点的所有相邻节点。假设我们要按排序顺序查找节点的所有相邻节点

我尝试了下面的方法,但没有成功

MATCH (ee:RECORD)-[:TAGGEDWITH]->(p:TAG)<-[:PARTOF]-(v:TAGTYPE)
RETURN p.tag_id as id,
       COLLECT( DISTINCT ee.record_id)  AS Records 
ORDER BY ee.record_id, p.NAME AS name,
         COUNT(*) AS n, v.NAME as group

MATCH(ee:RECORD)-[:TAGGEDWITH]->(p:TAG)No,
COLLECT
是一个聚合函数,非常类似于
COUNT
SUM

使用模式匹配
查找相邻节点

您可以使用中间
WITH
WITH
ORDER BY
对记录进行排序,然后再对它们进行聚合

MATCH (ee:RECORD)-[:TAGGEDWITH]->(p:TAG)<-[:PARTOF]-(v:TAGTYPE)
WITH p, ee
ORDER BY ee.record_id
RETURN p.tag_id as id, p.NAME AS name, v.NAME as group,
       COLLECT( DISTINCT ee.record_id)  AS records, 
       COUNT(*) AS n 

MATCH(ee:RECORD)-[:TAGGEDWITH]->(p:TAG)我认为这应该更接近您试图实现的目标:

WITH [1,3,5,2,4] AS coll
UNWIND coll AS elems
WITH elems ORDER BY elems
RETURN COLLECT(elems);
// [1,2,3,4,5]

它所做的是获取一个集合,将其展开(“取消收集”),对其进行排序,然后将其聚合回一个集合。我认为这是一个相当丑陋的解决方案,但它作为一个解决办法对我来说很有效。

我不确定,如果我的问题理解正确:-),收集获取一些项目,我只想对这些项目进行排序。我能用你的解决方案做到这一点吗?我想是的。但在许多用例中,这是对数组/集合中的内容进行排序的错误阶段,这是我当前的问题。如果我们已经有了一个数组/集合,并希望对其进行排序,该怎么办?或者,如果我们不想在查询的数据操作阶段更改顺序,但更愿意向用户显示排序结果,该怎么办?数组属性在图形数据库中比在关系数据库中重要得多,而且该领域似乎缺少太多的功能。。。