标签节点集的差异



我有两个标签,我们称它们为:红色和:绿色。 两个标签下的所有节点都有一个"name"属性。 我想使用 Cypher 列出 :Red 中那些不在 :Green 中的节点,按名称匹配。任何一个节点都将具有 :Red 标签或 :Green 标签,永远不会同时具有两者。

给定这些节点:

(:Red {name:"One"})
(:Red {name:"Two"})
(:Red {name:"Three"})
(:Green {name:"One"})
(:Green {name:"Two"})
(:Green {name:"Five"})

我希望红色但不绿色查询只显示一个节点,对于 name="Three",因为该名称值显示在 :Red label 下,但不显示在 :Green 下。

根据我的阅读和实验,EXISTS() 需要节点之间的关系。 我不想仅为查询添加它,然后再次删除它。 OPTIONAL MATCH通过为未配对的节点返回 NULL 来提供所需的输出。 但是,滚动列表对于非平凡的数据集是不切实际的。

使用社区 2.1.5。

create 
(:Red {name:"One"}),
(:Red {name:"Two"}),
(:Red {name:"Three"}),
(:Green {name:"One"}),
(:Green {name:"Two"}),
(:Green {name:"Five"});
MATCH (r:Red)
OPTIONAL MATCH (g:Green { name:r.name })
WITH r,g
WHERE g IS NULL 
RETURN r,g

请参阅:http://console.neo4j.org/r/ya2uw8

这应该可以做到:

MATCH (n:Red) 
WHERE NOT "Green" in labels(n)
RETURN n.name

最新更新