列表运算符
示例图
以下图表用于下方的示例
要重建该图,请在空的 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'})
示例
LIST 成员资格检查IN 运算符MATCH (n:Person)
WHERE n.role IN ['Software developer', 'Project manager']
RETURN n.name AS name, n.role AS role
| 名称 (name) | 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
| 名称 (name) | 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)。
| 名称 (name) | role(角色) |
|---|---|
|
|
行:1 |
|
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。
null 上使用 IN 运算符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 |