Neo4j:在 tree-like 图中显示所有连接的节点及其 parent
Neo4j: Display all connected nodes and their parent in tree-like graph
在我的 neo4j 数据库中得到以下布局:
a
/ | \
b c d
/ \ |
e f g
| / \
h i j
我想做的是查询所有 child 个节点,例如如果起始节点是b,那么children就是e,f,h。所有节点都具有相同的标签(名称)和相同的关系类型。
我可以通过以下方式完成:
MATCH (n:node {name:'b'}), (a)-[:DEPENDS_ON*]->(n) RETURN DISTINCT a.name as name
问题是,我希望每个 child 都有一个 "parent"。例如:
我想知道 h 在输出中,因为它有 parent f, f 在那里是因为 parent 是 b 等等。
非常感谢!
彼得
您可能想对路径而不是节点进行操作,尝试如下操作:
match (n:node {name:'b'}), p=(a)-[:DEPENDS_ON*]->(n)
WITH nodes(p) as pathNodes, length(nodes(p)) as l
RETURN pathNodes[l-1] as c1, "parent of", pathNodes[l-2] as c2;
这将采用任何路径并报告路径中倒数第二个节点是路径中最后一个节点的父节点。
这是一个查询 returns 所有不同的 parent/child 对。
MATCH path=(n:node {name:'b'})<-[:DEPENDS_ON*]-()
WITH NODES(path) AS np
WITH REDUCE(s=[], i IN RANGE(0, LENGTH(np)-2, 1) | s + {p:np[i], c:np[i+1]}) AS cpairs
UNWIND cpairs AS pairs
WITH DISTINCT pairs AS ps
RETURN ps.p, "parent of", ps.c;
在我的 neo4j 数据库中得到以下布局:
a
/ | \
b c d
/ \ |
e f g
| / \
h i j
我想做的是查询所有 child 个节点,例如如果起始节点是b,那么children就是e,f,h。所有节点都具有相同的标签(名称)和相同的关系类型。
我可以通过以下方式完成:
MATCH (n:node {name:'b'}), (a)-[:DEPENDS_ON*]->(n) RETURN DISTINCT a.name as name
问题是,我希望每个 child 都有一个 "parent"。例如:
我想知道 h 在输出中,因为它有 parent f, f 在那里是因为 parent 是 b 等等。
非常感谢!
彼得
您可能想对路径而不是节点进行操作,尝试如下操作:
match (n:node {name:'b'}), p=(a)-[:DEPENDS_ON*]->(n)
WITH nodes(p) as pathNodes, length(nodes(p)) as l
RETURN pathNodes[l-1] as c1, "parent of", pathNodes[l-2] as c2;
这将采用任何路径并报告路径中倒数第二个节点是路径中最后一个节点的父节点。
这是一个查询 returns 所有不同的 parent/child 对。
MATCH path=(n:node {name:'b'})<-[:DEPENDS_ON*]-()
WITH NODES(path) AS np
WITH REDUCE(s=[], i IN RANGE(0, LENGTH(np)-2, 1) | s + {p:np[i], c:np[i+1]}) AS cpairs
UNWIND cpairs AS pairs
WITH DISTINCT pairs AS ps
RETURN ps.p, "parent of", ps.c;