Neo4j/Cypher |没有从数据库中得到唯一的结果
Neo4j/Cypher | Not getting unique results from the database
我正在尝试从我的 Neo4j 数据库中获得完全独特的结果。
我有一个包含各种电影的数据库,用户可以观看部电影,电影之间可以相似。我正在尝试获取与用户已观看的电影相关的完全唯一的电影列表,并过滤掉已观看的电影。
据我所知,这应该可以通过使用 RETURN DISTINCT m
来实现,但如果您观看了多部与一部电影相似的电影,那将不起作用。
为了简单起见:
用户观看了电影 A
、B
和 C
。所有这些电影都类似于电影 D
现在,它 returns: D, D, D
.
我尝试了 DISTINCT movie
和 collect(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
希望大家帮帮我,
谢谢!
"non unique" 电影的原因是因为您已经返回 "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
您将拥有独特的电影和所有相关分数的总和。
我正在尝试从我的 Neo4j 数据库中获得完全独特的结果。
我有一个包含各种电影的数据库,用户可以观看部电影,电影之间可以相似。我正在尝试获取与用户已观看的电影相关的完全唯一的电影列表,并过滤掉已观看的电影。
据我所知,这应该可以通过使用 RETURN DISTINCT m
来实现,但如果您观看了多部与一部电影相似的电影,那将不起作用。
为了简单起见:
用户观看了电影 A
、B
和 C
。所有这些电影都类似于电影 D
现在,它 returns: D, D, D
.
我尝试了 DISTINCT movie
和 collect(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
希望大家帮帮我,
谢谢!
"non unique" 电影的原因是因为您已经返回 "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
您将拥有独特的电影和所有相关分数的总和。