簡體   English   中英

如何構造密碼查詢以包含 MATCH 子句中節點之間的路徑,而不刪除與“完整”模式不匹配的節點?

[英]How do I structure a cypher query to include paths between nodes from a MATCH clause without removing nodes that don't match the "full" pattern?

我已經嘗試了多種方法,所以我不會一一列舉。 讓我解釋一下我要實現的目標:

假設我有 3 種類型的節點:A、B 和 C,可能的定向鏈接形式為 (:A)-->(:B) 和 (:B)-->(:C) 和 (:C) -->(:C)。

我想要的是來自特定 A 節點的一個兩個鏈接的 B 和 C 節點,以及通過匯聚在公共 C 節點上的路徑將兩個 C 節點連接在一起的任何存在路徑。

首先,我想返回來自特定 A 實例的 B 和 C 節點,例如:

MATCH (a:A)-->(b:B)-->(c:C)
RETURN b,c

我還想包括的是節點集c收斂於公共c節點的所有路徑。 就像是

MATCH path=(c)-[*]->(c2:C)<-[*]-(c)
RETURN path

我嘗試了很多方法,我通常要么丟失沒有這樣路徑的 (b) 和 (c) 節點,要么我得到太多不屬於路徑的 (c2) 節點將 (c) 節點連接到另一個 (c) 節點(例如,如果我在查詢中使用 [*0..] 形式的關系)。

MATCH (a:A)-->(b:B)-->(c:C)
WITH a,COLLECT(DISTINCT b) as bNodes, COLLECT(DISTINCT c) as cNodes 
OPTIONAL MATCH (c:C)-->(c2:C)<--(c1:C)
WHERE c IN cNodes ANd c1 IN cNodes AND c<>c1 
WITH a ,bNodes,cNodes,c2 as convergePoint,COLLECT(DISTINCT c) AS convergingCNodes
RETURN a, bNodes,cNodes,convergePoint ,convergingCNodes 

據我理解的問題,我想這會返回你正在尋找的東西。 "a" A節點,bNodes中所有相連的B類節點,cNodes中的所有C類節點,如果有任何c類節點收斂則收斂點C類節點為convergePoint,convergingCNodes中該convergePoint節點上的所有收斂節點

TheCrusher 讓我非常接近,我做了一些修改以獲得我需要的東西:

MATCH (a:A {name:"a_name"})-->(b:B)-->(c:C)
WITH COLLECT(DISTINCT b) as bs, COLLECT(DISTINCT c) as cs
MATCH convergingPath=(c:C)-[*]->(c2:C)<-[*]-(c1:C)
WHERE c in cs AND c1 in cs AND c<>c1
RETURN bs, cs, convergingPath

暫無
暫無

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

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