簡體   English   中英

如何返回neo4j中具有一定關系的節點,然后返回與第一個節點具有不同關系的節點?

[英]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]

這將返回起始節點,“引用”節點和

  • 沒有“ changed_to”節點時什么都沒有
  • 只有一個時的一個“ changed_to”節點
  • 當存在多個節點時,最后一個“ changed_to”節點

您可以在此控制台中測試查詢。 它包含這三種情況下,你可以通過更換測試它們{uid}與值高於158 ,以獲得為三個路徑的起始節點。

暫無
暫無

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

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