2016-06-07 104 views
1

我有這個簡單的例子:的Neo4j:避免副路徑要返回

CREATE 
(P1:Person { fullname:'John Smith' }), 
(P2:Person { fullname:'Mark Almond'}), 
(P3:Person { fullname:'Mark Twain'}) 

CREATE 
(P1)-[:Friend]->(P2), 
(P2)-[:Friend]->(P3) 

當我運行以下查詢:

MATCH p=(a)-[*0..2]-() 
WHERE ID(a) = 0 // john smith id 
RETURN * 

我得到顯示右圖所示。

然而,當我看到返回的「行」,它顯示:

╒══════════════════════╤══════════════════════════════╕ 
│a      │p        │ 
╞══════════════════════╪══════════════════════════════╡ 
│{fullname: John Smith}│[{fullname: John Smith}]  │ 
├──────────────────────┼──────────────────────────────┤ 
│{fullname: John Smith}│[{fullname: John Smith}, {}, {│ 
│      │fullname: Mark Almond}]  │ 
├──────────────────────┼──────────────────────────────┤ 
│{fullname: John Smith}│[{fullname: John Smith}, {}, {│ 
│      │fullname: Mark Almond}, {}, {f│ 
│      │ullname: Mark Twain}]   │ 
└──────────────────────┴──────────────────────────────┘ 

有沒有辦法讓僅只有最長的路徑,而不是與1種或2個元素等「組合子」的路徑?

回答

0

使用此爲最長的路徑:我用你的第一個解決方案是

MATCH p=(a)-[*0..2]->(e) 
WHERE ID(a) = 0 // john smith id 
    AND NOT (e)-->() // no further outgoing rels from end node 
RETURN * 
+0

MATCH p=(a)-[*0..2]-() WHERE ID(a) = 0 // john smith id WITH a, p ORDER by length(p) desc LIMIT 1 RETURN * 

如果路徑規範使用方向(例如,只傳出的關係),您可以改用好的(但我的設置太簡單)。一個路徑和一個案例。當我有多個相同節點的長路徑時,問題就出現了。所以命令/限制技巧它不會工作(圖片我添加另一個朋友約翰史密斯與其他任何其他人),因爲我需要所有的路徑。 – Randomize