【问题标题】:Neo4j/Cypher | Not getting unique results from the databaseNeo4j/密码 |没有从数据库中获得独特的结果
【发布时间】:2016-04-20 10:49:42
【问题描述】:

我正在尝试从我的 Neo4j 数据库中获得完全独特的结果。

我有一个包含各种电影的数据库,用户可以观看电影,并且电影可以彼此相似。我正在尝试获取与用户已观看的电影相关的完全唯一的电影列表,并过滤掉已观看的电影。

据我所知,这应该可以通过使用 RETURN DISTINCT m 来实现,但如果您看过多部与一部电影相似的电影,这将不起作用。

所以为了简单起见: 用户观看了电影ABC。所有这些电影都类似于电影D 现在,它返回:D, D, D

我尝试了DISTINCT moviecollect(DISTINCT m) 都没有成功

我使用的完整查询是:

MATCH (u:user {name:'" + user + "'})-[:watched]->()-[r:is_similar_to]-(m)
WHERE NOT (u)-[:watched]-(m) 
RETURN collect(DISTINCT m), r ORDER BY r.rated

希望大家帮帮我

谢谢!

【问题讨论】:

    标签: database neo4j cypher unique


    【解决方案1】:

    “非唯一”电影的原因是因为您返回了“r”。

    这里有一个由 r 隐含的组。当您切换到“行”视图时,您可以看到您将有 3 行具有唯一关系 (r) 和行内唯一的电影。

    也许这就是你想要的:

    MATCH (u:user {name:'" + user + "'})-[:watched]->()-[r:is_similar_to]-(m)
    WHERE NOT (u)-[:watched]-(m) 
    RETURN m, sum(r.rated) as score
    ORDER by score DESC
    

    您将拥有独特的电影和所有相关分数的总和。

    【讨论】:

    • 感谢您的解释,它就像一个魅力!贝当克特!
    猜你喜欢
    • 2019-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-29
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    相关资源
    最近更新 更多