Я столкнулся с проблемой сегодня, понимая предложение OPTIONAL MATCH в cypher. Давайте рассмотрим этот простой случай:
CREATE (:a {type:"group"})-[:a_rel]->(:a {type: "app"})-[:b_rel]->(:b);
Это создаст 2 узла "a" с другим атрибутом типа, плюс один узел "b". Все они находятся в простом пути a -> a -> b
Затем я пытаюсь сопоставить узел "a", имеющий тип "group", связанный с другим узлом "a" Возможно, подключен к узлу "b".
Итак, если я выполню следующий запрос, я ожидаю, что он ничего не выдаст:
MATCH(x:a)-->(y:a)
where x.type = "group"
OPTIONAL MATCH (y)-->(z:b)
where z IS NULL
return y
, но он всегда возвращает второе "a" узел пути, используя IS NULL или IS NOT NULL в предложении where.
Не могли бы вы объяснить, что я не понимаю здесь. В моей реальной модели второй узел «а» может быть подключен или нет к узлу «б». Я хотел бы получить все те, которые не подключены к какому-либо узлу "b".
Большое спасибо за вашу помощь
Rémi