Ответ 1
Указание уникальности путей - это запланированная функция cypher.
Итак, прямо сейчас мы должны убедиться, что no node является дубликатом пути.
Существует предикат ALL
, который должен иметь значение true для всех элементов коллекции (какой путь).
И с помощью filter
вы можете извлечь элементы коллекции, для чего выполняется определенное условие.
START neo=node(1)
MATCH path= neo-[r:KNOWS*..4]->other
WHERE ALL(n in nodes(path) where
1=length(filter(m in nodes(path) : m=n)))
RETURN neo, LENGTH(path) AS length, EXTRACT(p in NODES(path) : p.name), other
ORDER BY length
Так что я сделал:
- Для всех узлов пути
n
- Отфильтровать путь для узлов, которые равны
n
- определить
length
этой коллекции - утвердить с помощью
ALL
, что он должен быть ОДНО для каждогоn