如果没有找到,则将OPTIONAL MATCH的返回类型更改为数组

时间:2017-05-19 06:26:05

标签: neo4j

我想知道如何处理 OPTIONAL MATCH 结果的空值。我想返回一个空数组,而不是 null

将用户作为列表返回,无论用户数是多少:

MATCH(u:User {some_property: "some_value"})
RETURN properties(u) LIMIT 25

将用户作为列表返回,如果用户数> 1,否则null

MATCH(u:User {some_property: "some_value"}), (x:SomeLabel {id: "<<someID>>"}) 
OPTIONAL MATCH (u)-[:SOME_RELATION]-(x) 
RETURN properties(u) LIMIT 25

将用户作为嵌套列表(数组中的数组)返回,如果用户数&gt; 1,否则作为清单。

MATCH(u:User {some_property: "some_value"}), (x:SomeLabel {id: "<<someID>>"})
OPTIONAL MATCH (u)-[:SOME_RELATION]-(x) 
RETURN COLLECT(properties(u)) LIMIT 25

什么是始终返回列表的优雅方式,既不是嵌套也不是null?仅使用条件表达式?

1 个答案:

答案 0 :(得分:2)

我不确定您从哪里获取该语法,RETURN as ...无效,即使有,properties()也会返回地图,而不是名单。同样在上一个查询中,即使COLLECT(properties(u))为空,u也应返回一个空列表,因此您不需要强制返回空列表。

但是对于其他想要返回空集合而不是null的查询,如果第一个表达式为null,则可以使用COALESCE()返回您提供的默认值。

...
RETURN coalesce(possibleNullVariable, []) as result