Neo4j:如何对 2 个列表进行顺序不敏感的相等性测试?

问题描述 投票:0回答:1

假设我有具有这些属性的节点:

name: abc
colors: [red,green,blue]

其中 colors 属性是一个列表,可以包含任何顺序的任意数量的元素。

我想创建一个查询来查找具有包含另一个列表的所有元素的颜色属性的节点,例如

[red,green,yellow,blue]

我将如何编写此查询?

我知道你可以做像

MATCH (n:Node) WHERE n.colors = [red,green,yellow,blue]
这样的事情,但这只会匹配那些按照确切顺序具有这些颜色列表的节点。我想要一个查询来检查节点的颜色属性是否以任何顺序包含指定的颜色。

有点像

myColors = [red,green,yellow,blue]
match = true
for each color in node.colors:
  if color not in myColors:
    // DO NOT MATCH
    match = false

但是作为一个有效的密码查询

neo4j cypher
1个回答
0
投票

您可以使用 ALL 谓词函数对 2 个列表进行不区分顺序的相等性测试:

MATCH (n:Node)
WHERE ALL(c IN n.colors WHERE c IN [red,green,yellow,blue])
...
© www.soinside.com 2019 - 2024. All rights reserved.