Neo4j 如何在Cypher中检查节点是否全局存在并对其设置条件?

Neo4j 如何在Cypher中检查节点是否全局存在并对其设置条件?,neo4j,cypher,Neo4j,Cypher,我正在努力解决在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'}) MERG

我正在努力解决在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='Bob'
时,查询才能返回具有
name='Alice'
的节点。因此,如果有鲍勃,我希望看到没有结果

以下是我尝试过的:

1) 与exists()一起

但它返回所有节点和关系

2) 没有()

这返回了所有节点,没有Bob

3) 与任何()

但这给了我和上面一样的结果

我不知道如何在鲍勃不在场的情况下才把爱丽丝还给她。 当我删除Bob时,我希望从查询中返回Alice,但当这样的节点存在时,则返回nothing

感谢您的帮助:)


谢谢

您应该尝试以下查询:

MATCH (n:Person {name:'Alice'})
WHERE NOT (n)-[:KNOWS*..3]-(:Person {name:'Bob'})
RETURN n

您应该尝试以下查询:

MATCH (n:Person {name:'Alice'})
WHERE NOT (n)-[:KNOWS*..3]-(:Person {name:'Bob'})
RETURN n
MATCH p =(n)-[*1..3]->(b)
WHERE n.name = 'Alice' AND NOT ANY (x IN nodes(p) WHERE x.name = 'Bob')
RETURN p
MATCH (n:Person {name:'Alice'})
WHERE NOT (n)-[:KNOWS*..3]-(:Person {name:'Bob'})
RETURN n