我在我的Neo4j这种关系:获取特定节点的所有孩子的,直到特定深度
Parent -> Childs
F -> D,E
D -> A,B,C
A -> X
使用案例:我想用这个查询以获得特定节点的所有子直到一个特定的深度,让我们说depth
= 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;
当我把深度= 2,返回
,它未返回D' (only returned A and not
B`, 'C')的所有儿童的
期望的回应是:
所有的孩子'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)
感谢,工作很适合我 –