例如,我创建了两个链接节点:
create (a:ACTOR {id: "a1", name: "bruce wellis"})
create (m:MOVIE {id: "m1", title: "die hardest"})
create (a)-[:ACTED_IN]->(m)
1。来自此密码查询:
match (a:ACTOR {id: "a1"})
with a
optional match (m:MOVIE {id: "m1"})
set m += {
title: "die easier"
}
return a;
我可以得到结果:
+-----------------------------------------+
| a |
+-----------------------------------------+
| Node[1000]{name:"bruce wellis",id:"a1"} |
+-----------------------------------------+
1 row
Properties set: 1
查询成功返回了actor节点。
2。 (更新)但是如果你使匹配MOVIE子查询失败:
match (a:ACTOR {id: "a1"})
with a
optional match (m:MOVIE {id: "mm"})
set m += {
title: "die easier"
}
return a;
我收到了错误:
CypherTypeException: Expected m to be a node or a relationship, but it was :`null`.
如何让第二个查询返回匹配的actor结果?
答案 0 :(得分:3)
无法匹配任何内容的MATCH
将始终不返回任何行。
因此,在#2中,由于第二个MATCH
失败,因此不返回任何行。
您可以使用OPTIONAL MATCH
代替第二个MATCH
,您应该会看到结果。
[EDITED] 对于更新的问题,这个(有点难看)的解决方法应该有效:
MATCH (a:ACTOR {id: "a1"})
WITH a
OPTIONAL MATCH (m:MOVIE {id: "mm"})
WITH a, COLLECT(m) AS cm
FOREACH(m IN cm | SET m += {title: "die easier"})
RETURN a;