【问题标题】:Cypher request to get actors who played in most movies, order by countCypher 请求获取在大多数电影中扮演的演员,按数量排序
【发布时间】: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。

【问题讨论】:

    标签: neo4j cypher


    【解决方案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(*) 的结果是模式计数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-24
      • 2017-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多