如何在Neo4j中筛选节点:找出仅存在于defaultInstance的节点
正确的Cypher查询写法
你的原查询存在语法错误,且masterinstance的大小写和目标值masterInstance不符,以下是几种正确实现需求的写法:
方法一:使用NOT EXISTS子查询
这种方式直接检查每个defaultInstance的table节点,是否不存在同名的masterInstance节点:
MATCH (t1:table {instance: "defaultInstance"}) WHERE NOT EXISTS { MATCH (t2:table {instance: "masterInstance", name: t1.name}) } RETURN t1.name AS name
方法二:使用OPTIONAL MATCH筛选空值
通过可选匹配关联同名的masterInstance节点,再筛选未匹配到的结果:
MATCH (t1:table {instance: "defaultInstance"}) OPTIONAL MATCH (t2:table {instance: "masterInstance", name: t1.name}) WHERE t2 IS NULL RETURN t1.name AS name
方法三:使用集合差集
先分别收集两类实例的table名称集合,再计算差集:
MATCH (t1:table {instance: "defaultInstance"}) WITH collect(t1.name) AS defaultNames MATCH (t2:table {instance: "masterInstance"}) WITH defaultNames, collect(t2.name) AS masterNames RETURN [name IN defaultNames WHERE NOT name IN masterNames] AS onlyInDefault
内容的提问来源于stack exchange,提问作者Tirth Shah
相关产品推荐
相关产品推荐

