2014-04-09 42 views
1

Neo4j COLLECT用于查找节点的所有节点。假设我们想要按照排序顺序一起查找节点的所有相邻节点。Neo4j收集和排序

我尝试了下面的方法,但它没有奏效。

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 

回答

4

没有,COLLECT是聚合函数很像COUNTSUM

MATCH带图案用于查找相邻节点。

您可以使用中间WITHORDER 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 
+0

我不确定,如果我的问题被正确理解:-),COLLECT获取一些项目,我只是想要对这些项目进行排序。我可以用你的解决方案实现这个吗 – user4654

+0

我认为它可以。但是在许多用例中,这是对数组/集合中的东西进行排序的错误阶段,这是我当前的问题。如果我们已经有一个数组/集合并且我们想对它进行分类呢?或者如果我们不想在查询的数据操作阶段改变排序,但我们更喜欢向用户显示排序结果?数据库属性在图形数据库中比在关系数据库中重要得多,并且在该区域中似乎缺少太多的功能...... – retrography

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] 

它所做的是采取的收集,放松它(“非收集它”),为了它,然后将其聚合回集合。我认为这个解决方案是一个相当丑陋的破解,但它对我来说是一种解决方法。