簡體   English   中英

Neo4j Cypher 查詢:通過輸入路徑查找節點

[英]Neo4j Cypher query: Find node by input path

我有一個包含系統樹層次結構的圖表。 在此圖中,一個根已索引 label 'MainRoot',所有其他關系的類型均為 'hasParent'。 我想構建一個查詢,將節點名稱列表 (=inputPath) 作為輸入,並在查詢結束時返回節點。

現在我有了這個工作示例,最后返回的項目是我想要的名稱為“java”的指定節點(位於 Root/src/main/java 中):

// Input
WITH ["Root", "src", "main", "java"] AS inputPath
// Iterator
UNWIND range(0,size(inputPath)-2) AS i
MATCH (parent)<-[:hasParent]-(child)
WHERE (parent.name = inputPath[i]) AND (child.name = inputPath[i+1])
RETURN child

但是,我現在想以某種方式讓查詢,查詢的第一個父元素是索引為 label 'MainRoot' 的節點。

  1. 我希望它會更有效率,因為它現在將在哪個節點開始遍歷。
  2. 如果我有結構,例如 Root/example/Root/src/main/java,查詢也會返回這個“java”節點,我顯然不想返回它。

知道我該怎么做嗎?

這是我能想到的最短的方法。

WITH ["Root", "src", "main", "java"] AS inputPath     
MATCH path=(mainRoot)<-[:hasParent*]-(child)
WHERE LENGTH(path) = SIZE(inputPath)-1
AND [n IN nodes(path) | n.name] = inputPath
RETURN path

暫無
暫無

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

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