我在github中找到了这个旧的bug清单,主要是寻求确认这是一个功能。有解决方法吗? 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为空时,rememberMe丢失
有没有办法解决这个问题?似乎无法使用CASE WHEN NULL来处理理解列表的总和。
答案 0 :(得分:0)
当前,在空白列表上的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