找到未设置属性的neo4j节点

And*_*i R 19 neo4j cypher

什么是cypher查询来查找属性不存在的节点?2个节点:A = {foo:true,名称:'A'},B = {name:'B'}

需要找到B,因为它没有foo,即B.foo未设置

man*_*mat 43

正如迈克尔·亨格所说

MATCH (n) WHERE NOT EXISTS(n.foo) RETURN n
Run Code Online (Sandbox Code Playgroud)

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

# Causes error with later versions of Neo4j
MATCH (n) WHERE NOT HAS(n.foo) RETURN n
Run Code Online (Sandbox Code Playgroud)

  • 使用`NOT exists(n.foo)`以便将来兼容. (9认同)
  • 您还可以使用 IS NULL 和 IS NOT NULL。例如 MATCH (n) WHERE n.foo IS NULL RETURN n (2认同)

小智 8

版本 4.3 EXISTS开始,属性已被弃用,您应该使用IS NOT NULL.

因此,对于您问题中的示例,您的查询现在是:

MATCH (n) WHERE n.foo IS NULL RETURN n
Run Code Online (Sandbox Code Playgroud)