我在 github 中发现了这个旧的错误列表,主要是为了确认这是一个功能。有解决方法吗? https://github.com/neo4j/neo4j/issues/5851
MATCH (rememberMe)
WITH rememberMe
UNWIND [(rememberMe)-[:hates]->(icecream) | icecream]
+ [(rememberMe)-[:vomits]->(cookies) | cookies]
AS noSuchThing
RETURN rememberMe
当 noSuchThing 为 null 时,rememberMe 会丢失
有办法解决这个问题吗?似乎无法让 CASE WHEN NULL 与理解列表的总和一起使用。
目前空列表上的 UNWIND 行为是预期的。 UNWIND 为列表中的每个元素发出一行,因此如果没有列表元素,则不会发出任何行,从而有效地清除原始行。
正如您在文档中提到的,有一种使用 CASE 的解决方法,即使用
[null]
列表代替空列表,以便保留单个列表元素并保留原始行。
对于您的情况,您需要放慢一点速度,您试图同时做很多事情,因此将列表的创建与 UNWIND 分开,您应该能够应用解决方法:
MATCH (rememberMe)
WITH rememberMe, [(rememberMe)-[:hates]->(icecream) | icecream]
+ [(rememberMe)-[:vomits]->(cookies) | cookies]
AS list
UNWIND CASE WHEN size(list) = 0 THEN [null] ELSE list END as noSuchThing
RETURN rememberMe
仅适用于最终来到这里的任何人 - 在对不存在的财产进行分割后放松时,我也遇到了类似的问题。
WITH rememberMe, split(n.property, ",") as list
UNWIND CASE WHEN list = [] THEN [] ELSE list END AS l
RETURN rememberMe
正在失去rememberME。修正为:
WITH rememberMe, split(CASE WHEN EXISTS(n.property) THEN n.property ELSE "" END, ",") as list
UNWIND CASE WHEN list = [] THEN [] ELSE list END AS l
RETURN rememberMe