[英]How to query extended path between nodes with Cypher in Neo4J?
我正在使用 Neo4J/Cypher 基於圖形模型存儲/檢索一些數據。
讓我們假設以下模型:我有一組通過關系 (type=CONNECTED_TO) 連接的節點 (type=child)。
C1 -[:CONNECTED_TO]-> C2 -[:CONNECTED_TO]-> C3 -[:CONNECTED_TO]-> C4
如果我想在不知道中間體的情況下查詢從 C1 到 C4 的路徑:
MATCH p=
(a:child {id:'c1Id'}) -[:CONNECTED_TO*0..]-(z:child {id:'c4Id'})
RETURN p
到現在為止還挺好。
現在假設每個孩子都包含在一個父級中,我想從父級 ID 開始查詢
P1 -[:CONTAINS]-> C1
P2 -[:CONTAINS]-> C2
P3 -[:CONTAINS]-> C3
P4 -[:CONTAINS]-> C4
查詢如下所示:
MATCH p=
(a:parent {id:'p1Id'})
-[:CONTAINS]->
(cStart:child)
-[:CONNECTED_TO*0..]-
(cEnd:child)
<-[Contains]-
(z:parent {id:'p4Id'})
RETURN p
這給了我很好的結果。 以下路徑:
P1 -[:CONTAINS]-> C1 -[:CONNECTED_TO]-> C2 -[:CONNECTED_TO]-> C3 -[:CONNECTED_TO]-> C4 <-[:CONTAINS]- P4
我想要做的是使用子拓撲查詢從 P1 到 P4 的這條路徑,但我還想檢索包含中間體的所有父級。
除此之外,我如何改進我的最后一個密碼查詢以返回:
P2 -[:CONTAINS]-> C2
P3 -[:CONTAINS]-> C3
是否可以? 也許我的模型設計不適合該用例? 在這種情況下,如何改進它以解決此查詢?
發送
您可以使用list comprehension
結構:
MATCH p=
(a:parent {id:'p1Id'})
-[:CONTAINS]->
(cStart:child)
-[:CONNECTED_TO*0..]-
(cEnd:child)
<-[Contains]-
(z:parent {id:'p4Id'})
RETURN p,
[n IN nodes(p)[1..-1] | (n)<-[:CONTAINS]-(:parent)][0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.