Cypher查询:如何返回仅出演过指定单部电影的演员节点
问题分析
你当前的查询只过滤了「出演过ID=11的电影」的演员,缺少了「该演员没有出演过其他任何电影」的过滤条件,所以会返回所有符合出演条件的演员,包括出演过多部电影的斯嘉丽·约翰逊。
修正后的Cypher查询
MATCH (targetMovie:Movie) WHERE ID(targetMovie) = 11 MATCH (actor:Actor)-[:ACTED_IN]-(targetMovie) // 过滤仅出演过1部电影的演员 WHERE SIZE((actor)-[:ACTED_IN]-(:Movie)) = 1 RETURN actor
逻辑说明
- 第一步先定位ID为11的目标电影节点,避免重复匹配开销
- 第二步匹配所有和该电影存在
ACTED_IN关系的演员节点 - 第三步的过滤条件为核心逻辑:统计每个演员所有
ACTED_IN关系关联的电影总数,只有总数为1的演员才符合「仅出演过指定电影」的要求,自动过滤掉出演过多部电影的演员 - 该逻辑仅统计
ACTED_IN类型的关系,演员的其他关系(如你提到的IS_FRIEND_WITH)不会对统计结果产生影响
如果你图数据库中的ACTED_IN有明确方向(通常是Actor->ACTED_IN->Movie),可以把关系箭头明确标注为->,查询性能会更好,对应把过滤条件修改为WHERE SIZE((actor)-[:ACTED_IN]->(:Movie)) = 1即可。
内容的提问来源于stack exchange,提问作者learningbtw
相关产品推荐
相关产品推荐

