查找未设置属性的Neo4j节点

39
使用Cypher,如何查找属性不存在的节点?
例如,我有两个节点:
A = {foo: true, name: 'A'},  B = { name: 'B'}

现在我想找到B,根据未设置foo属性进行选择。我该怎么做?

3个回答

64

正如Michael Hunger所提到的

MATCH (n) WHERE NOT EXISTS(n.foo) RETURN n

在旧版本的Neo4j中,您可以使用HAS:

# Causes error with later versions of Neo4j
MATCH (n) WHERE NOT HAS(n.foo) RETURN n

10
为了保持未来的兼容性,请使用 NOT exists(n.foo) - Michael Hunger
“Has” 不再受 Neo4j 支持并会产生错误。 - Liam
2
你也可以使用 IS NULL 和 IS NOT NULL。例如:MATCH (n) WHERE n.foo IS NULL RETURN n - bikeman868

7
自从Neo4j 4.3版本发布,属性上的EXISTS已经被弃用,你应该使用IS NOT NULL代替。因此,对于问题中的示例,你的查询现在应该是:
MATCH (n) WHERE n.foo IS NULL RETURN n

0
MATCH (f) WHERE f.foo IS NULL RETURN f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接