当后续查询在 Neo4j 密码查询中没有匹配结果时,使用 "WITH" 的链接结果不起作用

Chaining result with "WITH" doesn't work when the subsequent query doesn't have matched result in Neo4j cypher query

比如我创建了两个链接节点:

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`. 

如何使第二个查询返回匹配的演员结果?

无法匹配任何内容的 MATCH 将始终 return 没有行。

因此,在 #2 中,由于第二个 MATCH 失败,因此 return 没有行。

您可以使用 OPTIONAL MATCH 代替第二个 MATCH,您应该会看到结果。

[编辑] 对于更新的问题,这个(有点难看的)解决方法应该有效:

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;