Neo4j展开后使用返回空值的理解列表保留绑定变量

时间:2019-11-20 03:51:31

标签: neo4j

我在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来处理理解列表的总和。

1 个答案:

答案 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