You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Neo4j Cypher查询含≥2位导演≥5位演员的电影结果错误排查

Cypher查询统计电影演员、导演数量不准确的问题原因及解决方案

你编写的Cypher语句核心问题出在MATCH的多关系匹配会产生笛卡尔积,导致统计计数失真:

  • 你写的MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person)会把每一个演员和每一个导演的组合作为一条独立匹配结果返回
  • 举个例子:假设某部电影实际只有1位导演、3位演员,匹配后会生成1*3=3条记录,这时候你直接统计count(a)得到3,count(d)也得到3,会被误判定为符合「导演数≥2」的条件,这就是你返回过多不符合条件结果的核心原因

修复方案

方案1:使用size函数直接统计关系数量(性能更优,写法简洁)

直接通过模式表达式获取每部电影对应的演员、导演关系数量,不会产生笛卡尔积,性能更好:

MATCH (m:Movie)
WITH m, 
     size((:Person)-[:ACTED_IN]->(m)) AS actor_count,
     size((:Person)-[:DIRECTED]->(m)) AS director_count
WHERE actor_count >= 5 AND director_count >= 2
RETURN m.title, director_count, actor_count

方案2:聚合统计时加DISTINCT去重

如果你需要保留原有MATCH的写法,只需要在统计计数时对结果去重即可:

MATCH (a:Person)-[:ACTED_IN]->(m:Movie)<-[:DIRECTED]-(d:Person) 
WITH m, count(DISTINCT a) AS actor_count, count(DISTINCT d) AS director_count 
WHERE actor_count >= 5 AND director_count >= 2 
RETURN m.title, director_count, actor_count

内容的提问来源于stack exchange,提问作者tryingToLearnSomething

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:45:06