簡體   English   中英

Neo4j:帶有密碼的某些節點的過濾路徑

[英]Neo4j : Filtering path with some nodes with cypher

我想要A:Alpha和D:Alpha之間的所有路徑,而這兩個之間只有:Beta節點。 如果路徑包含相同類型或其他類型的節點,則應丟棄那些路徑。

Sample data - 
A:Alpha->B:Beta->C:Beta->D:Alpha
A:Alpha->M:Beta->Z:Gama->P:Beta->D:Alpha
A:Alpha->S:Beta->F:Beta->I:Beta-->D:Alpha
A:Alpha->U:Beta->X:Alpha->T:Alpha->W:Beta->D:Alpha

Result should be - 
A:Alpha->B:Beta->C:Beta->D:Alpha
A:Alpha->S:Beta->F:Beta->I:Beta-->D:Alpha

有人可以幫我同樣的密碼嗎?

謝謝

您只需要一個變長路徑和WHERE all()謂詞來限制路徑中間節點的標簽:

... // assume 'path' variable used in the match
WHERE all(node in nodes(path)[1..-1] WHERE node:Beta)
...

或者,您可以使用APOC Procedures ,因為路徑擴展器的選項應該能夠傳遞您想要的內容:

MATCH (a:Alpha)
CALL apoc.path.expandConfig(a, {relationshipFilter: '>', labelFilter:'/Alpha|+Beta' filterStartNode:false}) YIELD path
RETURN path

標簽過濾器是這里的關鍵。 /Alpha在:Alpha節點上創建終止節點過濾器,這意味着路徑將僅遍歷到遇到的第一個:Alpha節點,並且不會越過,返回的路徑始終以Alpha節點結尾。 +Beta在:Beta節點上為路徑中的節點創建白名單過濾器(當我們使用終止過濾器時,該白名單過濾器不適用於終端節點),而filterStartNode:false表示起始節點不受白名單過濾器的約束無論是。

這樣可以確保路徑僅到達第一個:Alpha節點,並且路徑中的所有中間節點都必須是:Beta節點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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