如何查询没有根节点的层次结构路径(作为路径列表)

问题描述 投票:0回答:1

我需要获取层次结构的 JSON 树(或某些层次结构,如果此模式有不同的根 - 因为我的示例中的 ```ps`` 是路径列表),我可以通过以下方式实现:

MATCH p=(parent)-[:metaClassOf*]->(child)
WHERE NOT (parent)<-[:metaClassOf]-()
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) yield value
RETURN value;

如果我只需要查询层次结构的一部分,我可以指定所需的叶子作为查询中的根:

MATCH (root {name: "The Root Name"})
MATCH p=(root)-[:metaClassOf*]->(child)
WHERE NOT (root)<-[:metaClassOf]-()
WITH COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) yield value
RETURN value;

但是如何从最后一个查询中排除

root
节点本身,因为我不希望它出现在最终的 JSON 树中?我会重复一遍,我需要来自根节点的路径列表,但没有这个根节点,然后将它们转换为 JSON 树。

我无法通过过滤

UNWIND
路径之后的节点来实现这一点,因为我不知道如何将它们组合回能够使用
apoc.convert.toTree(ps)
的路径列表,然后:

MATCH (root {name: "The Root Name"})
MATCH p=(root)-[:metaClassOf*]->(C_Child)
WHERE NOT (root)<-[:metaClassOf]-()
UNWIND nodes(p) as ns
WITH ns as nss
WHERE NOT nss.name= The Root Name"
return nss
neo4j cypher
1个回答
0
投票

此查询返回每个

subtree
的每个
root
(没有根节点),其
name
是“根名称”。

MATCH (root {name: "The Root Name"})-[:metaClassOf]->(n)
WHERE NOT ()-[:metaClassOf]->(root)
MATCH p=(n)-[:metaClassOf*0..]->()
WITH root, COLLECT(p) AS ps
CALL apoc.convert.toTree(ps) YIELD value AS subtree
RETURN root, subtree
© www.soinside.com 2019 - 2024. All rights reserved.