neo4j可选匹配和null

use*_*643 5 neo4j cypher

也许这种方法是错误的,但我使用可选匹配和收集构建了一个密码查询.如果有数据一切正常,如果没有,collect会为指定的属性返回null.看起来这是按照文档预期的.

理想情况下,我希望collect返回一个空数组,或者在没有匹配时返回null.我正在使用以下内容......

MATCH (p) WHERE id(p) = 11
OPTIONAL MATCH (p) -[:car]- (c)
OPTIONAL MATCH (p) -[:driver]- (u)
RETURN {
  _id: id(p), name: p.name, type: p.type,
  cars: collect({_id: id(c), name: c.name}),
  drivers: collect({_id: id(u), name: u.email})
} AS place
Run Code Online (Sandbox Code Playgroud)

Sat*_*nde 12

试试这样吧

MATCH (p) WHERE id(p) = 11
OPTIONAL MATCH (p) -[:car]- (c)
OPTIONAL MATCH (p) -[:driver]- (u)
RETURN {
  _id: id(p), name: p.name, type: p.type,
  cars: CASE WHEN c IS NOT NULL THEN collect({_id: id(c), name: c.name}) ELSE NULL END,
  drivers: CASE WHEN u IS NOT NULL THEN collect({_id: id(u), name: u.email}) ELSE NULL END
} AS place
Run Code Online (Sandbox Code Playgroud)

这将检查数据是否存在以便收集(如果存在)然后它将返回否则将返回null值