Сайфер, чтобы вернуть цепочку самореферентных отношений в компактно-строковом формате? - PullRequest
0 голосов
/ 29 ноября 2018

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

(User)-[REPORTS_TO]->(User)

Как я могу написать шифр таким образом, чтобы для каждого пользователя я возвращал строку для каждого пользователя, которая обозначает отчеты для происхождения этого пользователя (изпроизвольная глубина в цепочке управления)?То есть: если Джо отчитывается перед Джейн, а Джейн отчитывается перед Джоном за МАТЧ на «Джо», я получу строку (разделитель здесь, но может быть любым):

Джо,Джейн, Джон

для Джейн это будет:

Джейн, Джон

, а для Джона это будет:

Джон

(Альтернатива этому, где одно поле будет содержать целевого пользователя, а другое - отчет о происхождении, также приветствуется)

1 Ответ

0 голосов
/ 29 ноября 2018

Для этого вы можете либо вернуть коллекцию имен людей в цепочке:

MATCH path = (person:User)-[:REPORTS_TO*]->(top)
WHERE NOT (top)-[:REPORTS_TO]->()
RETURN person.name as name, [node in nodes(path) | node.name] as reportingChain

Или использовать Процедуры APOC , чтобы объединить элементы списка имен в строку:

MATCH path = (person:User)-[:REPORTS_TO*]->(top)
WHERE NOT (top)-[:REPORTS_TO]->()
WITH person.name as name, [node in nodes(path) | node.name] as reportingChain
RETURN name, apoc.text.join(reportingChain, ',') as reportingChainText
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...