簡體   English   中英

如何在 Neo4J 中使用 Cypher 查詢節點之間的擴展路徑?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM