Neo4j / Cypher |没有得到数据库的独特结果

时间:2016-04-20 10:49:42

标签: database neo4j cypher unique

我试图从我的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

我希望你们能帮助我,

谢谢!

1 个答案:

答案 0 :(得分:2)

非独特的原因"电影是因为你已经回归" r"。

这里有一个隐含的组。当您切换到Rows视图时,您可以看到您将拥有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

你将获得独特的电影和所有相关分数的总和。