Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 获取特定节点的所有子节点,直到达到特定深度_Graph_Neo4j - Fatal编程技术网

Graph 获取特定节点的所有子节点,直到达到特定深度

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

我在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)-[: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]