Cypher 请求获取在大多数电影中扮演的演员,按数量排序

Posted

技术标签:

【中文标题】Cypher 请求获取在大多数电影中扮演的演员,按数量排序【英文标题】:Cypher request to get actors who played in most movies, order by count 【发布时间】:2018-06-15 09:00:23 【问题描述】:

我正在尝试关注有关 neo4j 的视频教程,该视频教程使用默认在 neo4j 中找到的电影图形数据库。

在本教程中有一个任务要求检索在大多数电影中扮演的演员,按计数 DESC 排序并限制为 5。

教程解决方案与我的结果不匹配,并且有一些我不明白的地方。当我使用类似的 Cypher 请求时,我的结果得到了重复的电影。

教程解决方案:

MATCH (actor:Person)-[:ACTED_IN]-() RETURN actor.name, COUNT(*) as COUNT ORDER BY COUNT DESC LIMIT 5;

在我的解决方案中,我得到了重复:

MATCH (actor:Person)-[:ACTED_IN]-(movie:Movie) RETURN actor.name, COLLECT(movie.title), COUNT(*) as COUNT ORDER BY COUNT DESC LIMIT 5;

“梅格瑞恩”[“壮志凌云”,“你有邮件”,“西雅图不眠之夜”,“乔与火山”,“当哈利遇到莎莉”,“***枪”、“你有邮件”、“西雅图不眠之夜”、“乔与火山”、“当哈利遇到莎莉”、“壮志凌云”、“你有邮件” 、《西雅图夜未眠》、《乔与火山》、《当哈利遇到莎莉》]

当我使用时:

MATCH (actor:Person)-[:ACTED_IN]-(movie:Movie) RETURN actor.name,COLLECT(DISTINCT movie.title), COUNT(*) as COUNT ORDER按计数 DESC 限制 5;

我获得了与教程解决方案相同的电影,但 COUNT 列仍显示重复的电影 COUNT。

【问题讨论】:

【参考方案1】:

我在教程中遇到了类似的问题 - 使用 Cypher CREATE 语句多次添加相同的节点非常容易。也许这也发生在你身上?

也许只是运行:

MATCH(n) 返回 n;

然后观察整个图表 - 教程应该足够小,您会看到是否有重复。

【讨论】:

嗨,邪恶的。我没有添加任何 CREATE 语句......我什至重新启动了 neo4j juste 的新会话以确保。仅当我使用 COUNT(DISTINCT movie.title) 时,我得到与教程相同的结果,而教程不使用任何 DISTINCT 语句。【参考方案2】:

您可以在count 中使用distinct

MATCH (actor:Person)-[:ACTED_IN]-(movie:Movie) 
RETURN 
    actor.name,
    COLLECT(DISTINCT movie.title), 
    COUNT(DISTINCT movie) as COUNT 
ORDER BY COUNT DESC LIMIT 5;

附:在这种情况下,COUNT(*) 的结果是模式计数。

【讨论】:

以上是关于Cypher 请求获取在大多数电影中扮演的演员,按数量排序的主要内容,如果未能解决你的问题,请参考以下文章

数据库关系代数:如何找到在“环球影城”制作的所有电影中扮演过角色的演员?

如何使用scrapy规则从Wiki演员和电影页面爬行到仅演员和fimlography链接中的链接

从 IMDbPy 结果中的电影目录中获取电影 ID

cypher neo4j - 收集一组节点

MySQL初学者查询帮助,电影和演员

Redis目前在绝大多数的项目中扮演怎样的角色