Neo4j 标签节点集的差异

Neo4j 标签节点集的差异,neo4j,Neo4j,我有两个标签,我们叫它们:红色和:绿色。两个标签下的所有节点都具有名称属性。我想使用Cypher以:红色列出那些节点,这些节点不以:绿色列出,并且由名称匹配。任何一个节点都将具有:红色标签或:绿色标签,但决不能同时具有这两个标签 给定这些节点: (:Red {name:"One"}) (:Red {name:"Two"}) (:Red {name:"Three"}) (:Green {name:"One"}) (:Green {name:"Two"}) (:Green {name:"Five"}

我有两个标签,我们叫它们:红色和:绿色。两个标签下的所有节点都具有名称属性。我想使用Cypher以:红色列出那些节点,这些节点不以:绿色列出,并且由名称匹配。任何一个节点都将具有:红色标签或:绿色标签,但决不能同时具有这两个标签

给定这些节点:

(:Red {name:"One"})
(:Red {name:"Two"})
(:Red {name:"Three"})
(:Green {name:"One"})
(:Green {name:"Two"})
(:Green {name:"Five"})
我希望红色而非绿色查询只显示一个节点,因为name=3,因为名称值显示在:Red label下,而不是:Green下

从我的阅读和实验来看,EXISTS需要节点之间的关系。我不想只为查询添加这个,然后再次删除它。可选匹配通过为未配对的节点返回NULL来提供所需的输出。然而,对于非平凡的数据集,滚动列表是不切实际的

使用社区2.1.5.

这应该可以做到:

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

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