列表运算符
示例图
以下图用于下面的示例。
要在空的 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. 基本
LIST 成员检查IN 运算符MATCH (n:Person)
WHERE n.role IN ['Software developer', 'Project manager']
RETURN n.name AS name, n.role AS role
| 姓名 | 角色 |
|---|---|
|
|
|
|
|
|
行数:3 |
|
检查动态
LIST 中的成员关系MATCH (p:Person)
WITH p, ['Software developer', 'CEO'] AS roles
WHERE p.role IN roles
RETURN p.name AS name, p.role AS role
| 姓名 | 角色 |
|---|---|
|
|
|
|
|
|
行数:3 |
|
以下查询查找与 Cecil 或 Eskil 共享 role 但 name 不同的 Person 节点。
多个
IN 运算符WITH ['Cecil', 'Eskil'] AS names
MATCH (ce:Person)
WHERE ce.name IN names
WITH collect(ce.role) AS roles, names
MATCH (p:Person)
WHERE p.role IN roles AND NOT p.name IN names
RETURN p.name AS name, p.role AS role
只返回 Cecilia,因为她与 Cecil 共享一个 role (图中没有 Person 节点与 Eskil 共享 role)。
| 姓名 | 角色 |
|---|---|
|
|
行数:1 |
|
示例 2. 检查包含重复值的
LIST 中的成员关系LIST 中重复值的存在不影响 IN 运算符的结果,该运算符检查一个元素是否至少出现一次。例如,以下查询返回 true (有两个 Person 节点为 39 岁)。
检查包含重复值的
LIST 中的成员关系MATCH (p:Person)
WITH collect(p.age) AS allAges
RETURN 39 IN allAges AS listWithDuplicates
| listWithDuplicates |
|---|
|
行数:1 |
null 行为
当 null 参与成员关系检查时,结果将是 null。
将
IN 运算符与 null 一起使用RETURN null IN [1, 2, null] AS nullInList, 123 IN null AS valueInNull
| nullInList | valueInNull |
|---|---|
|
|
行数:1 |
|
要检查 null 是否是 LIST 的成员,请使用 any() 函数。
检查
null 是否是 LIST 的成员RETURN any(x IN [1, 2, null] WHERE x IS NULL) AS containsNull
| containsNull |
|---|
|
行数:1 |
嵌套列表
当与嵌套的 LIST 值一起使用时,IN 运算符评估一个 LIST 是否与作为外部 LIST 一部分的任何嵌套 LIST 值完全匹配。嵌套 LIST 中单个元素的部分匹配将返回 false。
检查嵌套
LIST 值中的成员关系RETURN [0, 2] IN [[1, 2], [3, 4]] AS listInNestedList
| listInNestedList |
|---|
|
行数:1 |
检查嵌套
LIST 值中的成员关系RETURN [3, 4] IN [[1, 2], [3, 4]] AS listInNestedList
| listInNestedList |
|---|
|
行数:1 |
检查嵌套
LIST 值中的部分成员关系RETURN [1] IN [[1, 2], [3, 4]] AS listInNestedTest
| listInNestedList |
|---|
|
行数:1 |
列表子集
子集检查验证一个 LIST 的所有元素是否存在于另一个 LIST 中。all() 函数用于确保第一个 LIST 中的每个元素都在第二个 LIST 中找到。
子集检查
WITH [1,3,4] AS sub, [3,5,1,7,6,2,8,4] AS list
RETURN all(x IN sub WHERE x IN list) AS subInList
这将返回 true,因为 sub 中的所有元素都是 list 的一部分。
| subInList |
|---|
|
行数:1 |
子集检查
WITH [1,3,9] AS sub, [3,5,1,7,6,2,8,4] AS list
RETURN all(x IN sub WHERE x IN list) AS subInList
这将返回 false,因为 sub 中的所有元素都不是 list 的一部分。
| subInList |
|---|
|
行数:1 |