CYPHER / NEO4J: Подсчет и удаление дубликатов из результатов списка понимания шаблонов - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь объединить количество и отличия со списком понимания и продолжаю получать ошибки.

Я думаю, это объясняет, что я хотел бы сделать, хотя я знаю, что это не работает:

Match (n) WHERE n.id={id}
RETURN n {.id, ems: [(n)<-[:LOTS_OF_PATHS*]-()<-[:EVEN_MORE_PATHS*]-(m) | id:     distinct m.id, count: count(distinct m)]}

Также пробовал там с некоторыми коллекциями

Match (n) WHERE n.id={id}
RETURN n {.id, ems: [(n)<-[:LOTS_OF_PATHS*]-()<-[:EVEN_MORE_PATHS*]-(m) | collect(distinct m {id:m.id}), count: count(distinct m)]}

Я на самом деле собираю списки понимания, и в идеале не хотел бы повторений в каждом массиве, а в идеале - нет повторов среди суммы сборов.

Match (n) WHERE n.id={id}
RETURN n {.id, collect([(n)<-[:LOTS_OF_PATHS*]-()<-[:EVEN_MORE_PATHS*]-(m) | distinct m.id])+ collect([(n)<-[:OTHER_PATHS*]-()<-[:MORE_PATHS*]-(o) | distinct o.id]) as distinct_ems_and_os} 

Подсчет менее важен, чем я могупосчитать массив, но хотел бы понять его немного лучше.

1 Ответ

0 голосов
/ 29 мая 2019

Этот запрос (который не использует довольно ограниченное понимание шаблона) может работать для вас:

MATCH (n)<-[:LOTS_OF_PATHS*]-()<-[:EVEN_MORE_PATHS*]-(m)
WHERE n.id = $id
WITH COLLECT(DISTINCT m.id) AS ems
RETURN {id: $id, ems: ems, count: SIZE(ems)}

ПРИМЕЧАНИЕ: отношения переменной длины имеют экспоненциальную сложность. Вам может потребоваться установить разумную верхнюю границу для количества прыжков, чтобы избежать нехватки памяти или длительного времени выполнения.

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