neo4j 使用模式解析修改密码查询后不返回任何行

rbl8hiat  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(187)

对neo4j电影数据集的密码查询将返回822行

MATCH (a:Actor)-[:ACTED_IN]->(m:Movie)
WHERE m.year = 2000
AND a.born IS NOT NULL
RETURN DISTINCT a.name AS Actor, a.born AS Born
order by a.born

我使用下面的模式理解修改了查询,它返回了15443行,但是它们都是空数组。

MATCH (a:Actor)
with a, [ (a where a.born is not null)-[:ACTED_IN]->(m:Movie where m.year = 2000)  | a.name ] as Actors
return Actors

我的意图是返回一个参与者列表,就像第一个查询一样。第二个查询中出了什么问题?

g6baxovj

g6baxovj1#

您的语法不正确。虽然这不是错误,但where子句应位于路径()-[]-()where〈〉的末尾。
那么大多数行都是空的,因为您没有在第一条语句中过滤Actor,所以即使结果为空,您的解析也会返回一行。您可以添加一个检查来检查集合中是否有行。
顺便说一句,原始查询已经很高效了,既然理解已经很快了,为什么还要使用它呢?

MATCH (a:Person) WHERE NOT a.born is null
WITH a, [ (a)-[:ACTED_IN]->(m:Movie) where m.released = 2000 | a.name ] as Actors  
WHERE size(Actors) > 0
RETURN Actors, a.born as Born order by Born
yv5phkfx

yv5phkfx2#

这可能就是您想要的:

RETURN [(a:Actor WHERE a.born IS NOT NULL)-[:ACTED_IN]->(m:Movie WHERE m.year = 2000)|a.name] AS Actors

相关问题