Graph 获取特定节点的所有子节点,直到达到特定深度
我在neo4j中有这种关系:Graph 获取特定节点的所有子节点,直到达到特定深度,graph,neo4j,Graph,Neo4j,我在neo4j中有这种关系: Parent -> Childs F -> D,E D -> A,B,C A -> X 用例:我试图使用此查询获取特定节点的所有子节点,直到特定深度,比如说深度=2 查询以获取节点的所有子节点F MATCH (p:Person)-[:REPORTS_TO *]->(c:Person) WHERE p.name="F" WITH COLLECT (c) + p AS all UNWIND all as p MATCH (p)-[:RE
Parent -> Childs
F -> D,E
D -> A,B,C
A -> X
用例:我试图使用此查询获取特定节点的所有子节点,直到特定深度,比如说深度
=2
查询以获取节点的所有子节点F
MATCH (p:Person)-[:REPORTS_TO *]->(c:Person) WHERE p.name="F"
WITH COLLECT (c) + p AS all
UNWIND all as p MATCH (p)-[:REPORTS_TO]-(c)
RETURN p,c;
这将返回我:(这是F的所有子节点,没有限制)
但是当我试图让所有的孩子到深度2时:
查询以获取深度为2的节点F
的所有子节点
MATCH (p:Person)-[:REPORTS_TO *2]->(c:Person) WHERE p.name="F"
WITH COLLECT (c) + p AS all
UNWIND all as p MATCH (p)-[:REPORTS_TO]->(c)
RETURN p,c;
返回
当我输入depth=2时,它没有返回
D'(只返回A,而不是B`,'C')的所有子级
预期响应为:
“F”的所有子节点、“F”的所有子节点的子节点(即级别1)和级别1的节点的所有子节点的子节点(即级别2)
我的查询中是否遗漏了一些内容,或者是否有任何其他方法可以像我预期的那样获得回复?
添加数据集
CREATE (f:Person {name: "F"})
CREATE (e:Person {name: "E"})
CREATE (d:Person {name: "D"})
CREATE (c:Person {name: "C"})
CREATE (b:Person {name: "B"})
CREATE (a:Person {name: "A"})
CREATE (x:Person {name: "X"})
CREATE (a)-[:REPORTS_TO]->(x)
CREATE (d)-[:REPORTS_TO]->(a)
CREATE (d)-[:REPORTS_TO]->(b)
CREATE (d)-[:REPORTS_TO]->(c)
CREATE (f)-[:REPORTS_TO]->(d)
CREATE (f)-[:REPORTS_TO]->(e)
问题是,你并不是在质疑你认为你在质疑的东西
[:REPORTS_TO *2]
不查询深度为2的节点,它只查询深度为2的节点。结果是节点B、C、A和F(因为您在中添加了它)
在这些节点中,只有节点A和F具有传出:REPORTS_TO关系,因此您的匹配将从结果集中消除B和C。返回的节点是A和F,并且传出的:REPORTS_可访问的节点向关系(E、D和X)报告
如果要更改查询,使其达到深度2而不是完全达到深度2,请在可变长度关系上使用一个范围(省略下限使其默认为1):
如果希望在匹配本身中包含F(而不是在收集节点时手动添加),请使用下限0:
[:REPORTS_TO *0..2]
[:REPORTS_TO *0..2]