【发布时间】:2017-02-13 21:31:16
【问题描述】:
使用http://console.neo4j.org 作为沙箱,我遇到了以下意外行为:
语句 1 - 返回 1 行,其中包含一个包含 Neo 节点的集合
MATCH (n:Crew)
WHERE n.name="Neo"
WITH COLLECT(n) AS c1
WITH c1+[] AS c2
RETURN c2
语句 2 - 返回 0 行(意外)
MATCH (n:Crew)
WHERE n.name="Neo"
WITH COLLECT(n) AS c1
MATCH (n:Crew)
WHERE n.name="NoOne"
WITH c1+COLLECT(n) AS c2
RETURN c2
语句 3 - 返回包含空集合的 1 行
MATCH (n:Crew)
WHERE n.name="NoOne"
WITH COLLECT(n) AS c1
RETURN c1
我不明白为什么 Statement 2 没有返回与 Statement 1 相同的结果,因为它应该返回一个包含 Neo 节点的集合,就像在 语句 1。
语句 3 表明 语句 2 中的第二个 MATCH 应该是一个空集合。
这种行为在 Cypher 中是预期的吗?如果是这种情况,我很乐意提供一个小解释来帮助我理解这种行为。
【问题讨论】:
-
在语句2中使用可选匹配,如果MATCH没有返回数据,那么(除非你有一个ONLY聚合结果)它不会返回任何行