我是neo4j的新手,正在尝试为项目构建概念验证。我的基本问题是,给定一个图,如果选择一个根节点,如何找到图中位于它下方的所有子节点。我不想返回任何父节点
我一直在研究某些apoc功能,但没有成功。
例如
MATCH (x{id:1})
CALL apoc.path.subgraphAll(x,{relationshipFilter:'PARENT[>]'}) YIELD nodes,
relationships
RETURN nodes, relationships
或
MATCH (x{id:1})
CALL apoc.path.subgraphNodes(x,{relationshipFilter:'[<]PARENT'}) YIELD node
RETURN node
我希望它能奏效,但显然我在概念上误解了。
在以下测试案例中
CREATE (r:root)
FOREACH (i IN range(1,5)|
CREATE (r)-[:PARENT]->(c:child { id:i }));
MATCH (c:child)
FOREACH (j IN range(1,5)|
CREATE (c)-[:PARENT]->(:child { id:c.id*10+j }));
MATCH (c:child)
FOREACH (j IN range(1,5)|
CREATE (c)-[:PARENT]->(:child { id:c.id*10+j }));
如果我想将根节点设置为节点5,则尝试返回5,51,52,53,54,55,然后还返回所有子节点。 511至555
答案 0 :(得分:0)
对于其中一个,您应该始终在查询中使用标签(因为如果您已经在给定标签+属性上创建了索引,则可以使用索引进行查找)。
否则,查询看起来非常正确,除了关系过滤器中有一个小问题:
relationshipFilter:'[<]PARENT'
不需要方向周围的括号。在文档中,它们表示方向是可选的,但是括号本身不应该包含在字面上。
尝试一下:
MATCH (x:child {id:1})
CALL apoc.path.subgraphNodes(x,{relationshipFilter:'<PARENT'}) YIELD node
RETURN node