Return 个在另一个节点集中没有 属性 值的节点

Return nodes which do not have a property value in another node set

我是 Neo4j 的新手,但无法在文档中找到我要找的内容。我使用的是不支持子查询的 3.5 版。

我有两组节点,为简单起见,我将其称为 RocksBicycles。这些集合有一些相似的属性,但没有关系,而且它们完全不同——Rocks 中没有节点在 Bicycles 中。但是,对于称为“颜色”的特定 属性,它们可能具有相同的值。但是对于 Rocks 中的节点 属性 拼写为 color 而对于 Bicycles 中的节点拼写为 colour.

我想要的是 return Bicycles 中的所有节点,这些节点在 Rocks 中的任何节点中都没有 colour 值。

这是我对 return Rocks 中节点的所有颜色的查询:

MATCH (r:Rocks) WITH r.color AS excludecolors RETURN excludecolors

这 return 正是我所期望的 - 颜色的十六进制值列表:["ff5733", "#0a8a00", "4f28ff", ...]

现在我想 return Bicycles 中的所有颜色 独家 我在 Rocks[ 的集合中找到的颜色=33=]

MATCH (r:Rocks) WITH r.color AS excludecolors RETURN excludecolors
MATCH (b:Bicycles) WHERE NOT b.colour IN [excludecolors] RETURN DISTINCT b.colour

然而,这 return 是自行车中的所有东西 - 包括 excludecolors 中的颜色!我可以通过输入我想排除的特定值来手动排除它们:

MATCH (b:Bicycles) WHERE NOT b.colour IN ["ff5733", "#0a8a00"] RETURN DISTINCT b.colour

但是手工做的事情太多了。我如何才能 return 只有 Bicycles 而不是 Rocks 中的颜色?我能想到的最接近的等价物是 SQL 外连接,但我对如何在 cypher

中做到这一点感到很困惑

这应该有效:

MATCH (r:Rocks)
WITH COLLECT(DISTINCT r.color) AS excludeColors
MATCH (b:Bicycles)
WHERE NOT b.colour IN excludeColors
RETURN DISTINCT b.colour