neo4j graph найти путь от родителя к каждому ребенку без отношения - PullRequest
0 голосов
/ 29 января 2020

Я хочу напечатать все пути присутствия формы родительского узла к дочернему узлу для всех деревьев, присутствующих в графе. База данных содержит Sr manager как root node.Database содержит только одно дерево, поддерживаемое в иерархии, без графа. Существует только 2 типа узлов Сотрудник и Должность. Узел сотрудника связан с другим узлом сотрудника с помощью: boss_of, где каждый сотрудник имеет только один узел положения, связанный с отношением has_power. нет связи / отношения между разными позициями. Я хочу напечатать все имеющиеся пути следующим образом. Sr manager всегда будет присутствовать в начале пути Пожалуйста, см. Диаграмму.

Sr Manager 
Sr Manager -> Manager 
Sr Manager -> Manager -> jr developer
Sr Manager -> Manager -> sr developer
Sr Manager -> Manager -> tester
Sr Manager -> Manager -> tester -> BA
Sr Manager -> Manager -> tester -> BA -> jrBA 
Sr Manager -> Manager -> tester -> BA -> jrBA -> content writer[enter 

и так далее .....

Извинения! есть небольшое изменение в структуре графа, есть еще один тип узла, связанный с Employee, помеченный как Домен, поэтому в графе присутствуют 3 типа узлов Employee, Position и Domain, тогда как Position и Domain связаны с Employee с помощью: has_power и: отношение has_ref, соответственно, и нет отношения между Position и Domain

Вот примеры введите описание изображения здесь введите описание изображения здесь

1 Ответ

0 голосов
/ 29 января 2020

Хорошо, вам нужно сопоставить все ваши иерархии (начиная с root, у которого нет боссов), затем для каждого узла в иерархии замените его на свою позицию, затем получите различные результаты. , Примерно так:

MATCH path = (top:Employee)-[:boss_of*0..]->(emp)
WHERE NOT ()-[:boss_of]->(top)
WITH DISTINCT [node in nodes(path) | [(position)-[:has_power]->(node) | position][0]] as positions
ORDER BY size(positions) DESC

При этом используется понимание списка для изменения каждого элемента узлов в пути и понимание шаблона для сопоставления сотрудника с позицией, которую занимает сотрудник, и проецирования этой позиции на список.

Если вам нужны только текстовые результаты из списка, вам нужно получить доступ к любому свойству (name?), которое вы используете для хранения названия позиции.

...