【发布时间】:2020-11-19 01:35:07
【问题描述】:
我对 Neo4j 还比较陌生,但无法在文档中找到我要查找的内容。我使用的是不支持子查询的 3.5 版。
我有两组节点,为简单起见,我将它们称为Rocks 和Bicycles。这些集合具有一些相似的属性,但没有关系并且它们是完全不同的——Rocks 中没有节点,而 Bicycles 中没有节点。但是,对于称为“颜色”的特定属性,它们可能具有相同的值。但是对于Rocks 中的节点,该属性拼写为color,对于Bicycles 中的节点,其拼写为colour。
我想要返回Bicycles 中的所有节点,这些节点在Rocks 的任何节点中都没有colour 值。
这是我返回 Rocks 中所有节点颜色的查询:
MATCH (r:Rocks) WITH r.color AS excludecolors RETURN excludecolors
返回的正是我所期望的 - 颜色的十六进制值列表:["ff5733", "#0a8a00", "4f28ff", ...]
现在我想返回 Bicycles 中的所有颜色 EXCLUSIVE 我在 Rocks 的集合中找到的颜色
MATCH (r:Rocks) WITH r.color AS excludecolors RETURN excludecolors
MATCH (b:Bicycles) WHERE NOT b.colour IN [excludecolors] RETURN DISTINCT b.colour
但是,这会返回 Bicycles 中的所有内容 - 包括 excludecolors 中的颜色!我可以通过输入要排除的特定值来手动排除它们:
MATCH (b:Bicycles) WHERE NOT b.colour IN ["ff5733", "#0a8a00"] RETURN DISTINCT b.colour
但是有太多的事情需要手工完成。我怎样才能只返回在Bicycles 中找到的颜色,而不是在Rocks 中找到的颜色?我能想到的最接近的等价物是 SQL 外连接,但我对如何在 cypher 中做到这一点感到很困惑
【问题讨论】: