Как найти промежуточные узлы между двумя узлами, используя Cypher - PullRequest
0 голосов
/ 07 мая 2018

Department with Users У нас есть дерево отделов, как показано на рисунке

Мне нужно перечислить все узлы отделов и связанных пользователей для узла между узлами D1 и D1.A1.B1

Мне нужен запрос Cypher для этого.

Результатом должен быть отдел: D1, D1.A1, D1.A1.B1 и пользователи: U1, U2, U4

1 Ответ

0 голосов
/ 07 мая 2018

Следующий запрос Cypher с использованием сопоставления с образцом переменной длины , node (), unwind и collect() должен работать. Пояснения к комментариям:

// 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
...