2017-02-06 2 views
5

Мы находим, что писать и поддерживать запросы 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

+0

Интересный случай. Я думаю, что это стоит рассматривать как расширение возможностей cypher. –

ответ

0

Я не думаю, что есть способ сделать это, и учитывая то, как агрегирование работать в Cypher, я думаю, что это вызвало бы гораздо больше головной боли, чем это было бы вылечить.

Помните, что агрегации имеют смысл только для столбцов без агрегации, которые образуют ключ группировки. Я считаю, что явное включение переменных в предложения WITH должно быть неоценимым, поскольку оно дает вам представление о том, какие поля находятся в области видимости, что дает вам контекст для столбцов агрегации.

Без этого вы рискуете ошибочным поведением, поскольку могут быть переменные в объеме, который вы забыли исключить, что изменит значение и вычислит ваши скопления.

+0

У нас есть ошибки, потому что мы должны явно указать все, что должно быть включено. Это в первую очередь при выполнении простого сбора 'WITH collect (c) AS cs', где мы хотим отбросить' c', но сохраним все остальное. С помощью последовательности «ДОПОЛНИТЕЛЬНАЯ МАТЧА», которая собирает, это очень утомительно и подвержено ошибкам. – simendsjo