Можно ли вернуть узлы с отношениями по определенному свойству? - PullRequest
0 голосов
/ 06 апреля 2020

Согласно документации Neo4J, я могу проверить, существует ли связь между двумя узлами, которые возвращают истину / ложь с этим кодом

MATCH (n) WHERE EXISTS (n.name) RETURN n.name AS name, EXISTS ((n)-[:MARRIED]->()) AS is_married

Я хочу знать, возможно ли это также сопоставить по дате вступления в брак (собственность отношения), чтобы также возвратить true / false.

Пример:

MATCH (n) WHERE EXISTS (n.name) RETURN n.name AS name, EXISTS ((n)-[:MARRIED]->()) WHERE married_date = '2020-03-20' AS is_married

, который вернет истину или ложь, если на самом деле отношение соответствует дате или нет.

Есть идеи?

Спасибо.

1 Ответ

1 голос
/ 06 апреля 2020

Вы можете поместить свойство встроенным в существующий шаблон:

MATCH (n)
WHERE EXISTS (n.name)
RETURN n.name AS name, EXISTS ((n)-[:MARRIED {married_date:'2020-03-20'}]->()) AS is_married

Для более сложной фильтрации (фильтрация по диапазону или пре / суффиксы или что-либо еще, что не может быть захвачено встроенным в сам шаблон), нам нужно взглянуть на другие варианты.

Возможно, лучший запасной вариант - использование функций предикатов вместо понимания шаблона .

Понимание паттернов дает нам возможность проецировать отношения в список, а функция предиката any() может проверить, есть ли какие-либо из этих отношений, подходящих для сложного предиката, например:

MATCH (n)
WHERE EXISTS (n.name)
RETURN n.name AS name, any(rel in [(n)-[r:MARRIED]->() | r] WHERE rel.married_date STARTS WITH '2020-03') AS is_married_in_march_2020
...