Cypher Query: связанные узлы различаются - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь написать запрос для возврата всех связанных узлов, связанных с "IMMEDIATE_FAMILY_MEMBER"

Graph

Это мой запрос до сих пор

MATCH (f:NaturalPerson)-[r:IMMEDIATE_FAMILY_MEMBER*1..6]-(t)
WHERE f.Name="Jacob"
RETURN f AS fromNode, t AS toNode, r AS Metadata

Первоначально я думал, что это сработало довольно хорошо, но как только я добавил ребенка Thuthukile (Parents Jacob and Nkosazana), я получил «дублирующие» результаты.

В настоящий момент запрос вернет пару связанных узлов и все связи, которые были пройдены для их соединения (т. Е. Метаданных).

Как изменить этот запрос, чтобы я вернулсяотдельная пара узлов с кратчайшим путем (всеми связями) между ними.

Также в качестве дополнительного вопроса можно указать или для метки самого отношения. То есть тот же запрос, но также включает в себя следующее: отношение ЗНАЕТ

Редактировать:

ответ cybersams был верным, я внес одно небольшое изменение, чтобы получить желаемый результат.

Myпоследний запрос был таким:

MATCH (f:NaturalPerson)-[r:IMMEDIATE_FAMILY_MEMBER*..6]-(t)
WHERE f.Name="Jacob" AND t.Name<>"Jacob"
WITH f, t, r
ORDER BY SIZE(r)
RETURN f AS fromNode, t AS toNode, COLLECT(r)[0] AS Metadata

Мне нужно было исключить "от человека" в качестве пункта назначения, поскольку меня не интересовал кратчайший путь к родителю

1 Ответ

1 голос
/ 07 ноября 2019

В сторону: почему это NaturalPerson? Есть ли в БД "неестественные" люди?

Это должно работать:

MATCH (f:NaturalPerson)-[r:IMMEDIATE_FAMILY_MEMBER*..6]-(t)
WHERE f.Name="Jacob"
WITH f, t, r
ORDER BY SIZE(r)
RETURN f AS fromNode, t AS toNode, COLLECT(r)[0] AS Metadata

Запрос сортируется по длине найденных путей, использует Функция агрегирования COLLECT позволяет получить список всех путей r для данной пары значений f и t и использует первый (т. е. самый короткий) путь в каждом списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...