2014-04-09 76 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] 

它所做的是採取的收集,放鬆它(「非收集它」),爲了它,然後將其聚合回集合。我認爲這個解決方案是一個相當醜陋的破解,但它對我來說是一種解決方法。