比较运算符

比较运算符用于比较值。Cypher® 包含以下比较运算符:

  • 相等:=

  • 不等:<>

  • 小于:<

  • 大于:>

  • 小于或等于:<=

  • 大于或等于:>=

  • IS NULL

  • IS NOT NULL 以及 PROPERTY_EXISTS 谓词

有关 Cypher 如何对不同值类型进行排序和比较的更多信息,请参阅 值与类型 → 值类型的相等性、排序和比较

示例图

以下图表用于下方的示例

predicate operators

要重建该图,请在空的 Neo4j 数据库中运行以下查询

CREATE (alice:Person {name:'Alice', age: 65, role: 'Project manager', email: 'alice@company.com'}),
       (cecil:Person {name: 'Cecil', age: 25, role: 'Software developer', email: 'cecil@private.se'}),
       (cecilia:Person {name: 'Cecilia', age: 31, role: 'Software developer'}),
       (charlie:Person {name: 'Charlie', age: 61, role: 'Security engineer'}),
       (daniel:Person {name: 'Daniel', age: 39, role: 'Director', email: 'daniel@company.com'}),
       (eskil:Person {name: 'Eskil', age: 39, role: 'CEO', email: 'eskil@company.com'})

示例

示例 1. 比较运算符
相等运算符 (=)
MATCH (n:Person)
WHERE n.role = 'Software developer'
RETURN n.name AS name, n.role AS role
结果
名称 (name) role(角色)

"Cecil"

"Software developer"

"Cecilia"

"Software developer"

行:2

不等运算符 (<>)
MATCH (n:Person)
WHERE n.role <> 'Software developer'
RETURN n.name AS name, n.role AS role
结果
名称 (name) role(角色)

"Alice"

"项目经理"

"Charlie"

"Security engineer"

"Daniel"

"Director"

"Eskil"

"首席执行官"

行:4

小于运算符 (<)
MATCH (n:Person)
WHERE n.age < 39
RETURN n.name AS name, n.age AS age
结果
名称 (name) age

"Cecil"

25

"Cecilia"

31

行:2

小于或等于运算符 (<=)
MATCH (n:Person)
WHERE n.age <= 39
RETURN n.name AS name, n.age AS age
结果
名称 (name) age

"Cecil"

25

"Cecilia"

31

"Daniel"

39

"Eskil"

39

行:4

大于运算符 (>)
MATCH (n:Person)
WHERE n.age > 39
RETURN n.name AS name, n.age AS age
结果
名称 (name) age

"Alice"

65

"Charlie"

61

行:2

大于或等于运算符 (>=)
MATCH (n:Person)
WHERE n.age >= 39
RETURN n.name AS name, n.age AS age
结果
名称 (name) age

"Alice"

65

"Charlie"

61

"Daniel"

39

"Eskil"

39

行:4

IS NULL 运算符
MATCH (n:Person)
WHERE n.email IS NULL
RETURN n.name AS name
结果
名称 (name)

"Cecilia"

"Charlie"

行:2

IS NOT NULL 运算符
MATCH (n:Person)
WHERE n.email IS NOT NULL
RETURN n.name AS name, n.email AS email
结果
名称 (name) email

"Alice"

"alice@company.com"

"Cecil"

"cecil@private.se"

"Daniel"

"daniel@company.com"

"Eskil"

"eskil@company.com"

行:4

IS NOT NULL 谓词用于测试表达式是否求值为非 NULL 的值。有关 GQL 属性存在谓词(GQL 特性 G115),请参阅 PROPERTY_EXISTS 谓词

PROPERTY_EXISTS 谓词

可选的 GQL 特性 G115 定义了 PROPERTY_EXISTS(element, propertyName) 谓词,用于测试节点或关系上是否存在某属性且该属性不为 NULL

自 Neo4j 2026.03 版本起,Cypher 支持该 GQL 语法

MATCH (n:Person)
WHERE PROPERTY_EXISTS(n, email)
RETURN n.name AS name, n.email AS email

对于节点和关系属性,这等同于

MATCH (n:Person)
WHERE n.email IS NOT NULL
RETURN n.name AS name, n.email AS email

注意与差异

  • 第二个参数必须是属性名称标识符(例如 email)。不允许使用字符串字面量和表达式。

  • 如果 element 参数为 NULL,则 PROPERTY_EXISTS 返回 NULL(符合 GQL 语义)。

  • PROPERTY_EXISTS 仅适用于节点和关系属性。IS NOT NULL 更通用,可以应用于任何表达式。

链式比较运算符

可以链接的比较次数没有限制。如果链接两个或多个比较运算符,则每个比较实际上由 AND 运算符分隔(尽管在语法上不需要显式写出 AND)。例如,如果 a, b, c, …​, z 是表达式,而 op1, op2, …​, opN 是比较运算符,则以下表达式是等价的

等价表达式
a op1 b op2 c ... y opN z;
a op1 b AND b op2 c AND ... y opN z

请注意,a op1 b op2 c 并不隐含 ac 之间的任何比较。例如,在 x < y > z 中,xz 不会进行比较。

链式相等运算符

=<> 的链在 Cypher 中以特殊方式处理。具体来说,1=1=true 等同于 1=1 AND 1=true,而不是 (1=1)=true1=(1=true)。例如,以下表达式是等价的。

等价表达式
a < b = c <= d <> e;
a < b AND b = c AND c <= d AND d <> e