Мы находим, что писать и поддерживать запросы Cypher немного больно, когда дело касается сбора предметов. Мы часто хотим что-то собрать и отбросить исходный узел. См следующий пример:Отбрасывание узлов, которые мы собираем за
MATCH (p)-[]-(c) WITH p, collect(c) as c RETURN p, c
выше не выглядит так уж плохо. Проблема заключается в явном наименовании p
, которое мы хотим сохранить. Поскольку мы добавляем больше MATCH
и OPTIONAL MATCH
с агрегацией, это становится кошмаром ремонтопригодности. Мы не можем переупорядочить пары MATCH
/WITH
без изменения всех полей, которые мы ссылаемся. Когда мы делаем collect
, мы всегда хотим отбросить исходный узел.
WITH
имеет *
, который может быть использован, но это будет поле, которое мы собираем, и мы не можем заменить это значение.
MATCH (p)-[]-(c) WITH *, collect(c) as c RETURN p, c
Есть ли способ, чтобы исключить что-то в WITH
заявление без явного присвоения имен все, что должно быть включено? Что-то вроде следующего?
MATCH (p)-[]-(c) WITH *, without(c), collect(c) as cs RETURN p, cs
Интересный случай. Я думаю, что это стоит рассматривать как расширение возможностей cypher. –