Cypher要求获得在大多数电影中播放的演员,按计数排序

时间:2018-01-05 14:20:28

标签: neo4j cypher

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

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

教程解决方案与我的结果不符,有些东西我不明白。当我使用类似的Cypher请求时,我的结果会重复电影。

教程解决方案:

  

MATCH(演员:人) - [:ACTED_IN] - ()RETURN actor.name,
                                   COUNT(*)为COUNT ORDER BY COUNT DESC LIMIT 5;

enter image description here

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

  

MATCH(演员:人) - [:ACTED_IN] - (电影:电影)RETURN actor.name,
                                  收集(movie.title),COUNT(*)为COUNT ORDER BY COUNT DESC LIMIT 5;   enter image description here

     “梅格瑞恩”[“Top Gun”,“你有邮件”,“在西雅图失眠”,“Joe Versus the Volcano”,“当Harry遇到Sally”,“Top枪“,”你有邮件“,”在西雅图失眠“,”Joe Versus the Volcano“,”当Harry遇到Sally“,”Top Gun“,”你有邮件“ ,“在西雅图失眠”,“Joe Versus the Volcano”,“当Harry遇到莎莉”时,

当我使用时:

  

MATCH(演员:人) - [:ACTED_IN] - (电影:电影)RETURN actor.name,
                                  收集(DISTINCT movie.title),COUNT(*)作为COUNT ORDER BY COUNT DESC LIMIT 5;

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

2 个答案:

答案 0 :(得分:0)

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

也许只是跑:

MATCH(n)返回n;

然后眼球整个图表 - 教程应该小到足以做到这一点&你会看到你是否有重复。

答案 1 :(得分:0)

您可以在distinct内使用count

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;

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