2014-01-10 16 views
0

我試圖模仿neo4j瀏覽器的功能來在我的前端顯示我的圖形。 neo4j瀏覽器針對每個查詢都發出兩個調用 - 第一個調用執行用戶鍵入查詢框的查詢,第二個調用使用查找第一個用戶輸入的查詢中返回的每個節點之間的關係。在收集/分解集合上執行MATCH

{ 
    "statements":[{ 
    "statement":"START a = node(1,2,3,4), b = node(1,2,3,4) 
       MATCH a -[r]-> b RETURN r;", 
    "resultDataContents":["row","graph"], 
    "includeStats":true}] 
} 

在我的應用程序,我想更有效,所以我希望能夠得到我所有的節點和關係在一個單一的查詢。我有現在的查詢是:

START person = node({personId}) 
MATCH person-[:RELATIONSHIP*]-(p:Person) 
WITH distinct p 
MATCH p-[r]-(d:Data), p-[:DETAILS]->(details), d-[:FACT]->(facts) 
RETURN p, r, d, details, facts 

此查詢運行良好,但它並沒有給我「d」和「細節」,這是鏈接到原始的「人」的節點。

我試圖加入「p」和「人」的結果集合中:

collect(p) + collect(person) AS people 

但是,這並不讓我對結果集合進行匹配。據我所知,沒有辦法拆分收藏品。

我現在看到的唯一選擇是將查詢分成兩部分;返回「collect(p)+ collect(person)AS people」集合,然後在第二個查詢中使用節點值。有沒有更有效的方式來執行此查詢?

回答

3

如果使用量詞*0.. RELATIONSHIP在深度爲0時也匹配,因此在此情況下personp相同。沒有指定限制的*默認爲1..infinity

START person = node({personId}) 
MATCH person-[:RELATIONSHIP*0..]-(p:Person) 
WITH distinct p 
MATCH p-[r]-(d:Data), p-[:DETAILS]->(details), d-[:FACT]->(facts) 
RETURN p, r, d, details, facts 
+0

感謝您的回答。這工作完美 – rorymadden