Я борюсь с проблемой создания запроса в Cypher.Давайте использовать этот график в качестве примера:
MERGE(a:Person {name:'Alice', age:38, eyes:'brown'})
MERGE(c:Person {name:'Charlie', age:53, eyes:'green'})
MERGE(d:Person {name:'Daniel', age:54, eyes:'brown'})
MERGE(b:Person {name:'Bob', age:25, eyes:'blue'})
MERGE(a)-[:KNOWS]->(c)
MERGE(a)-[:KNOWS]->(b)
MERGE(c)-[:KNOWS]->(d)
MERGE(b)-[:KNOWS]->(d)
Я хотел бы иметь запрос, который возвращает мне узлы с name = 'Alice'
, только если нет узлов с name = 'Bob'
.Поэтому, если есть Боб, я бы не хотел видеть результатов.
Вот что я пробовал:
1) С существует ()
MATCH p =(n)-[*1..3]->(b)
WHERE n.name = 'Alice' AND NOT EXISTS ((n {name: 'Bob'})-[*1..3]->(b))
RETURN p
Но этовозвращает все узлы и отношения.
2) С none ()
MATCH p =(n)-[*1..3]->(b)
WHERE n.name = 'Alice' AND NONE (x IN nodes(p) WHERE x.name = 'Bob')
RETURN p
Это вернуло все узлы, без Боба ...
3) с любым ()
MATCH p =(n)-[*1..3]->(b)
WHERE n.name = 'Alice' AND NOT ANY (x IN nodes(p) WHERE x.name = 'Bob')
RETURN p
Но это дало мне тот же результат, что и выше.
У меня заканчиваются идеи, как вернуть Алису, только если Боба нет.Что я мог бы ожидать от запроса, так это возвращать Алису, когда я удаляю Боба, но когда такой узел существует - ничего.
Любая помощь приветствуется:)
Спасибо!