[英]How do I return nodes in neo4j that have a certain relationship, and then return nodes that have a different relationship with the first nodes?
我有一堆“引用”其他節點的節點。 然后,所引用的節點(refer_to是該關系)可以與另一個節點changed_to有關系。 與changed_to關系相關的那些節點也可能與另一個節點具有另一個changed_to關系。 我想返回所引用的節點,還要返回所引用的節點被更改為的節點。 我嘗試了一個查詢,該查詢返回引用的節點並結合了一個聯合,並帶有一個將ReferencedNode的可選匹配項更改為ResultNode的聯合,但是我認為這不會奏效,因為它只會讓我獲得引用的節點加上第一個更改為node的節點,之后便什么也沒有首先,假設這完全可行。 如何用所描述的行為進行查詢?
編輯:這是正在進行的關系的示例。 我想返回被引用的節點和被引用的節點最終成為的節點,並有一些指示符表明它最終成為了該節點。
您能否舉一些您嘗試過的查詢示例? 這就是我的想法:
MATCH path=(n)-[:refer_to]->(o)-[:changed_to*1..5]->(p)
WHERE n.id = {start_id}
RETURN nodes(path), rels(path)
當然,我不知道您是否具有id
屬性,因此可能需要更改。 另外,您start_id
在此處傳遞start_id
參數。
如果要返回“引用”節點和最后一個“ changed_to”節點(如果存在),則可以首先匹配已知的關系,然后以可變深度匹配可能存在的路徑。 如果存在多個“ changed_to”關系,那么此時您將有多個結果項。 如果需要所有“ changed_to”節點,則可以立即返回,但是如果只希望最后一個節點,則可以按路徑深度(限制為1)降序排列結果項以獲取最長路徑,然后返回該路徑中的最后一個節點路徑。 該查詢可能看起來像
MATCH (n)-[:REFERENCES]->(o)
WHERE n.uid = {uid}
OPTIONAL MATCH path=o-[:CHANGED_TO*1..5]->(p)
WITH n, o, path
ORDER BY length(path) DESC
LIMIT 1
RETURN n, o, nodes(path)[-1]
這將返回起始節點,“引用”節點和
您可以在此控制台中測試查詢。 它包含這三種情況下,你可以通過更換測試它們{uid}
與值高於1
, 5
和8
,以獲得為三個路徑的起始節點。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.