Neo4j收集和排序在一起

时间:2014-04-09 02:19:31

标签: neo4j cypher

在Neo4j中,COLLECT用于查找节点的所有adjecent节点。如果我们想要在SORTED ORDER中一起找到节点的所有相邻节点,请提供。

我尝试了以下方法,但它没有用。

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

2 个答案:

答案 0 :(得分:4)

不,COLLECT是一个与COUNTSUM非常相似的聚合函数。

带有模式的

MATCH用于查找相邻节点。

您可以使用带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 

答案 1 :(得分:1)

我认为这应该更接近你想要实现的目标:

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]

它做的是采取一个集合,展开它(“取消它”),订购它然后将它聚合回一个集合。我认为这个解决方案是一个相当丑陋的黑客,但它对我来说是一个解决方法。