У меня возникают проблемы с возвратом узлов, которые не имеют отношения к определенному свойству.
Вот запрос для построения графика для сценария:
create ({Name:'Foo1'})-[:T]->({Name:'Bar'})<-[:T{Inactive:true}]-({Name:'Foo2'})<-[:T]-({Name:'Foo3'})
Теперь, чтобы указать желаемый результат больше: я хочу получить все узлы, которые так или иначе связаны с «Bar». Таким образом, из графика, созданного с помощью приведенного выше запроса, я ожидаю получить Foo1 и Foo3.
У меня возникли проблемы с получением узлов, которые НЕ связаны со свойством "Неактивно", с помощью следующего запроса:
match (bar)<-[rs*]-(foo) where ID(bar)= **BAR_ID**
optional match (foo)-[r]->() where r in rs
with foo, collect(distinct r) as relationships
where none(rel in relationships where rel.Inactive = true)
return foo
Теперь вы можете заметить, что запрос немного экстравагантен со вторым предложением where. Это часть другого решения другой проблемы, поэтому, пожалуйста, не сосредотачивайтесь на этой части, если только она не является частью моей проблемы. Меня интересует, почему запрос вообще ничего не возвращает. Кажется, что предикат функции none() работает неправильно. Тем более, что замена none() на any() вернет только Foo2, как и ожидалось:
match (bar)<-[rs*]-(foo) where ID(bar)= **BAR_ID**
optional match (foo)-[r]->() where r in rs
with foo, collect(distinct r) as relationships
where any(rel in relationships where rel.Inactive = true)
return foo
Итак, снова возникает вопрос, почему запрос, использующий функцию none(), ничего не возвращает. Сначала я подумал, что это может иметь какое-то отношение к некоторым отношениям, не имеющим свойства «Неактивный», а docs, они говорят вам, что отсутствующие свойства оцениваются как ложные (поскольку они нулевые). По крайней мере, это моя интерпретация, которая, конечно, может быть ошибочной.
Меня не интересует решение проблемы, так как я уже написал другой запрос, который возвращает Foo1 и Foo3. Мне интересно узнать, почему рассматриваемый запрос не работает.