[英]Multiple relationships of the same type but with different properties between the same two nodes
[英]Querying nodes based on relationships between two different nodes
我有一個圖表,其中有兩種不同類型的節點 A 和 B 通過關系 rel 連接。 它的存在使得 A 的多個節點可能連接到 B 之一。我的確切問題是,假設我有 2 個 A 類型的節點 a1、a2 通過關系 rel 連接到 b1。 我有與節點 b2 相關的類型 A 的節點 a3。 我想找到一個包含 a1、a2 和 a3 的節點 b3,然后在 b3 和 b2、b1 之間建立關系,如果它們滿足一個屬性(b3.prop/b2.prop>x & b3.prop/b1.prop>x )。 是否可以在 cypher 中編寫一個查詢來處理這樣的多個關系?
這可能適用於您的場景:
MATCH (b1:B), (b2:B)
WHERE b1.id = 123 AND b2.id = 456
MATCH (a1:A)-[:rel]->(b1)
MATCH (a1)-[:rel]->(y1:B)
WHERE y1 <> b1 AND y1 <> b2
WITH b2, COLLECT(DISTINCT a1) AS a1s, COLLECT(DISTINCT y1) AS otherBs
WITH b2, [b IN otherBs WHERE ALL(a IN a1s WHERE (a)-[:rel]->(b))] AS candidates
WHERE SIZE(candidates) > 0
MATCH (a2:A)-[:rel]->(b2)
WITH candidates, COLLECT(a2) AS a2s
UNWIND [c IN candidates WHERE ALL(a IN a2s WHERE (a)-[:rel]->(c))] AS b3
RETURN b3
此查詢假定rel
關系從A
指向B
,並且僅當存在任何適當的b3
節點時才會返回結果。 它首先創建與b1
相關的A
節點相關的所有可能B
candidates
的列表。 然后它會縮減candidates
列表,只保留與b2
相關的A
節點的B
節點。
此查詢中有許多細微差別。 例如,如果與b1
有rel
關系的任何A
節點與其他B
節點(與b1
和b2
不同)不具有rel
關系,則此代碼段將中止查詢:
MATCH (a1)-[:rel]->(b1)
MATCH (a1)-[:rel]->(y1:B)
WHERE y1 <> b1 AND y1 <> b2
然而,如果所有與b1
有rel
關系的A
節點也不與其他某個B
節點有rel
關系(與b1
和b2
不同),則對上述代碼段的以下重構只會中止查詢:
MATCH (y1:B)<-[:rel]-(a1)-[:rel]->(b1)
WHERE y1 <> b1 AND y1 <> b2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.