列表运算符
示例图
以下图用于下面的示例。
要在空的 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 |