我有两个标签,我们称之为:红色和:绿色。两个标签下的所有节点都具有“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。
答案 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