如何解决Neo4j Cypher查询:按输入路径查找节点
我有一个图,其中包含系统的树层次结构。在此图中,一个根具有索引标签“ MainRoot”,所有其他关系均为“ hasParent”类型。 我想构造一个查询,其中将节点名称列表(= inputPath)作为输入并在查询结束时返回该节点。
现在我有这个工作示例,最后返回的项目是我想要的(位于Root / src / main / java中)的名称为“ 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
但是,我现在想以某种方式让该查询成为查询的第一个父元素是带有索引标签“ MainRoot”的节点。
- 我希望它会更有效,因为现在它将在哪个节点上开始遍历。
- 如果我有结构,例如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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。