将结果与“链接”;加上;不';如果后续查询不可用,则无法工作';在Neo4j cypher查询中没有匹配的结果

将结果与“链接”;加上;不';如果后续查询不可用,则无法工作';在Neo4j cypher查询中没有匹配的结果,neo4j,cypher,Neo4j,Cypher,例如,我创建了两个链接节点: 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:

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

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
查询成功返回了参与者节点

2。(已更新)但如果使匹配电影子查询失败:

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

如何进行第二次查询,返回匹配的参与者结果?

A
MATCH
如果没有匹配任何内容,将始终不返回任何行

因此,在#2中,由于第二次
匹配失败,因此它不返回任何行

您可以使用
可选匹配
代替第二个
匹配
,您应该可以看到结果

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

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;

无法匹配任何内容的
MATCH
将始终不返回任何行

因此,在#2中,由于第二次
匹配失败,因此它不返回任何行

您可以使用
可选匹配
代替第二个
匹配
,您应该可以看到结果

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

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;

无法匹配任何内容的
MATCH
将始终不返回任何行

因此,在#2中,由于第二次
匹配失败,因此它不返回任何行

您可以使用
可选匹配
代替第二个
匹配
,您应该可以看到结果

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

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;

无法匹配任何内容的
MATCH
将始终不返回任何行

因此,在#2中,由于第二次
匹配失败,因此它不返回任何行

您可以使用
可选匹配
代替第二个
匹配
,您应该可以看到结果

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

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;

您好,请查看更新的问题。如果我用set更新movie节点,它将不起作用。如果
m
为NULL,则
set
子句将失败。改用此子句:
SET m.title=“die easer”
。如果
m
为NULL,则它不会执行任何操作(并且不会导致错误)。但是如果有很多属性,则使用直接节点集(
set m+={params}
)会很方便,特别是如果我使用。是否有解决方案?请参阅我的更新答案。
FOREACH
子句将跳过
cm
中的
NULL
项。您好,请查看更新的问题。如果我用set更新movie节点,它将不起作用。如果
m
为NULL,则
set
子句将失败。改用此子句:
SET m.title=“die easer”
。如果
m
为NULL,则它不会执行任何操作(并且不会导致错误)。但是如果有很多属性,则使用直接节点集(
set m+={params}
)会很方便,特别是如果我使用。是否有解决方案?请参阅我的更新答案。
FOREACH
子句将跳过
cm
中的
NULL
项。您好,请查看更新的问题。如果我用set更新movie节点,它将不起作用。如果
m
为NULL,则
set
子句将失败。改用此子句:
SET m.title=“die easer”
。如果
m
为NULL,则它不会执行任何操作(并且不会导致错误)。但是如果有很多属性,则使用直接节点集(
set m+={params}
)会很方便,特别是如果我使用。是否有解决方案?请参阅我的更新答案。
FOREACH
子句将跳过
cm
中的
NULL
项。您好,请查看更新的问题。如果我用set更新movie节点,它将不起作用。如果
m
为NULL,则
set
子句将失败。改用此子句:
SET m.title=“die easer”
。如果
m
为NULL,则它不会执行任何操作(并且不会导致错误)。但是如果有很多属性,则使用直接节点集(
set m+={params}
)会很方便,特别是如果我使用。是否有解决方案?请参阅我的更新答案。
FOREACH
子句将跳过
cm
中的
NULL
项。