Neo4j的可选匹配和空值

6
也许这种方法不太对,但我使用了可选匹配和收集构建了一个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
1个回答

15

试试这样做

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

这将检查是否有数据可收集,如果有,则返回该数据,否则将返回空值


谢谢,这个解决了问题。虽然在驱动程序的情况下有一个错字,应该是WHEN u IS NOT NULL。我想编辑但我不能。 - user2704643

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接