gpt4 book ai didi

neo4j - 在 Cypher 中组合集合的意外行为

转载 作者:行者123 更新时间:2023-12-05 00:17:35 26 4
gpt4 key购买 nike

使用 http://console.neo4j.org作为沙箱,我遇到了以下意外行为:

语句 1 - 返回包含 Neo 节点集合的 1 行

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

我不明白为什么 声明 2 返回的结果与 不同声明 1 ,因为它应该返回一个包含 Neo 节点的集合,就像在 中一样声明 1 .
声明 3 显示第二个 MATCH声明 2 应该导致一个空的集合。

这种行为在 Cypher 中是预期的吗?如果是这种情况,我会很高兴有一个小小的解释来帮助我理解这种行为。

最佳答案

我以前遇到过这种确切的行为,这非常令人沮丧。问题在于第二个 MATCH查询 2 中的子句:如果现有的结果行(在本例中,带有 c1 的单行)不返回 MATCH 的任何结果,在那之后该行将被完全删除 MATCH条款,即使 MATCH单独(没有预先存在的结果行)返回一个空集合。如果您将其转换为 OPTIONAL MATCH当没有匹配项时,您将能够保留结果行。

更新:有关更彻底的分析,请参见下文,但 tl,dr 是第二个 COLLECT(n)在语句 2 中确实返回一个空列表,就像在语句 3 中一样;然而,整个条款WITH c1+COLLECT(n) AS c2不返回任何行,因为没有带有 c1 的行第二个之后的值 MATCH .

关于neo4j - 在 Cypher 中组合集合的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39873935/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com