Neo4j实现逐行输出演员及共同参演公共电影列表的方法
Neo4j多演员共同参演电影逐行输出查询方案
实现逻辑:先计算所有指定演员共同参演的公共电影列表,再将输入的演员列表展开,每行对应一个演员搭配相同的公共电影列表输出。
原生Cypher实现示例(无需安装插件)
// 替换为你需要查询的目标演员列表 WITH ['Keanu Reeves', 'Hugo Weaving', 'Emil Eifrem'] AS targetActors // 匹配目标演员的参演电影 MATCH (a:Person)-[:ACTED_IN]->(m:Movie) WHERE a.name IN targetActors // 统计符合条件的演员总数,同时收集所有参演的电影名 WITH targetActors, collect(m.title) AS allMovies, count(DISTINCT a) AS totalActorNum // 筛选出出现次数等于演员总数的电影,即所有演员共同参演的公共电影 WITH targetActors, [movie IN apoc.coll.toSet(allMovies) WHERE size([m IN allMovies WHERE m = movie]) = totalActorNum] AS commonMovies // 展开演员列表逐行输出 UNWIND targetActors AS actorName RETURN actorName, commonMovies
APOC插件实现示例(更简洁)
// 替换为你需要查询的目标演员列表 WITH ['Keanu Reeves', 'Hugo Weaving', 'Emil Eifrem'] AS targetActors // 匹配目标演员的参演电影,按演员分组收集各自的参演电影列表 MATCH (a:Person)-[:ACTED_IN]->(m:Movie) WHERE a.name IN targetActors WITH targetActors, collect(DISTINCT m.title) AS actorMovieList // 计算所有演员参演列表的交集,得到公共电影 WITH targetActors, apoc.coll.intersectionAll(actorMovieList) AS commonMovies // 展开演员列表逐行输出 UNWIND targetActors AS actorName RETURN actorName, commonMovies
查询返回结果和要求的格式完全一致,每行的公共电影列表内容相同。
内容的提问来源于stack exchange,提问作者Pavan Kumar Kattamuri
相关产品推荐
相关产品推荐

