如何使用 Cypher 查找两个节点之间的中间节点
How to find intermediate nodes between two nodes using Cypher
我们有如图所示的部门树
我需要列出节点 在 节点 D1 和 D1.A1.B1
之间的所有部门节点和关联用户
我需要一个 Cypher 查询。
结果应为部门:D1、D1.A1、D1.A1.B1 和用户:U1、U2、U4
以下使用 variable-length pattern matching、nodes()、unwind
和 collect()
的 Cypher 查询应该有效。评论说明:
// match the entire path from 'D1' to 'D1.A1.B1'
match p = ( {name : 'D1'} )-[*]->( {name : 'D1.A1.B1'} )
// get all nodes (departments) from path
with nodes(p) as deps
// unwind deps collection to individual departments
unwind deps as dep
// match workers and managers directly connected to dep nodes
match (dep)<-[:WORKER|:MANAGER]-(u:User)
return collect(dep) as departments, collect(u) as users
我需要列出节点 在 节点 D1 和 D1.A1.B1
之间的所有部门节点和关联用户我需要一个 Cypher 查询。
结果应为部门:D1、D1.A1、D1.A1.B1 和用户:U1、U2、U4
以下使用 variable-length pattern matching、nodes()、unwind
和 collect()
的 Cypher 查询应该有效。评论说明:
// match the entire path from 'D1' to 'D1.A1.B1'
match p = ( {name : 'D1'} )-[*]->( {name : 'D1.A1.B1'} )
// get all nodes (departments) from path
with nodes(p) as deps
// unwind deps collection to individual departments
unwind deps as dep
// match workers and managers directly connected to dep nodes
match (dep)<-[:WORKER|:MANAGER]-(u:User)
return collect(dep) as departments, collect(u) as users