标签节点集的差异

时间:2014-11-26 10:36:28

标签: neo4j

我有两个标签,我们称之为:红色和:绿色。两个标签下的所有节点都具有“name”属性。我想使用Cypher列出这些节点:红色不在:绿色,按名​​称匹配。任何一个节点都将具有:红色标签或:绿色标签,而不是两者。

鉴于这些节点:

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

我希望Red-but-not-Green查询只显示一个节点,因为name =“Three”,因为该名称值显示在:Red label但不在:Green。

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

使用社区2.1.5。

2 个答案:

答案 0 :(得分:0)

这应该这样做:

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

答案 1 :(得分:0)

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