我想写一个返回节点(a)的查询,与它直接相邻的节点(b),然后是连接到(b)的所有节点,但不是那些已经被识别为的节点( b)中。
所以...如果我的图表是:
d
/
a<--b
\
c
我想返回{a,[b],[c,d]}。
到目前为止,我有以下查询(&#39; prop&#39;属性区分每个节点):
MATCH (a)<-[:something]-(b)<-[:something*0..]<-(c)
WHERE NOT (c.prop IN b.prop)
RETURN a.prop, collect(b.prop), collect (c.prop)
如果我的图表如下:
a<--b
我希望结果是{a,[b],[]}但是我没有得到任何回报,很可能是因为c.prop在b.prop中。我尝试使用OPTIONAL MATCH,但这也不起作用:
MATCH (a)<-[:something]-(b)
OPTIONAL MATCH (a)<-[:something]<-(b)<-[:something*0..]<-(c)
WHERE NOT (c.prop IN b.prop)
RETURN a.prop, collect(b.prop), collect (c.prop)
有任何方法可以获得预期的结果吗?
答案 0 :(得分:2)
当我运行以下查询时:
MATCH (n:Crew)-[r:LOVES*]->m
OPTIONAL MATCH (m:Crew)-[r2:KNOWS*]->o
WHERE n.name='Neo' AND NOT (o.name IN m.name)
RETURN n,m,o
在http://console.neo4j.org/中,在示例图上,我得到了Neo和Trinity,即使Trinity知道没有人(o是空的)。我认为OPTIONAL MATCH只需要包含遍历的实际可选部分,而在代码中你拥有一切。 (a)<-[:something]<-(b)
不应出现在那里,只有(b)<-[:something*0..]<-(c)