![](/img/trans.png)
[英]How to check if there is a relationship between two nodes in a single DB transaction/Query?
[英]How would I query for a relationship between these two nodes?
如果我有一個節點(p)和(e)像這樣的圖:
(p:Person)-[r:WorksFor]->(e:Employer)
我有以下數據:
(Person {name: Andrew})-[r:WorksFor]->(Employer {name: Google})
(Person {name: James})-[r:WorksFor]->(Employer {name: Google})
(Person {name: James})-[r:WorksFor]->(Employer {name: Apple})
(Person {name: Evan})-[r:WorksFor]->(Employer {name: Apple})
如何通過每種關系在(Person {name:Evan})之間進行查詢,然后到達(Person {name:Andrew})之間,從而返回每個雇主和個人以及中間有任意數量的雇主和個人?
理想情況下,上面的代碼將返回如下所示的鏈:
(Andrew)->(Google)->(James)->(Apple)->(Evan)
謝謝您的幫助。
(編輯)附錄:
以下內容似乎可行,但僅當玩家分開兩個角度時,有沒有辦法使長度完全可變?
MATCH
(p:Person {name: "Andrew"})-->(e:Employer)<--(p3:Person)-->(e2:Employer)<--(p2:Person {name: "Evan"})
RETURN *
您需要可變長度的模式匹配 。
根據您的圖形,您可以定義要遍歷或忽略類型的關系。 我們可以省略方向來指定我們不關心關系的遍歷方向:
MATCH path = (p:Person {name: "Andrew"})-[:WorksFor*]-(p2:Person {name: "Evan"})
RETURN path
如果要在路徑中包含節點,則可以返回nodes(path)
以獲取該列表。
如果只需要這兩者之間的最短路徑,則可以將兩者匹配,然后使用shortestPath函數進行匹配:
MATCH (p:Person {name: "Andrew"}), (p2:Person {name: "Evan"})
MATCH path = shortestPath((p)-[:WorksFor*]-(p2))
RETURN path
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.