Cypher(Neo4j)-查找所有关系,只要节点中的一个关系满足条件,而不考虑搜索路径?
请原谅这个不好的标题,我是一个基本上使用密码和图形数据库的初学者。我不确定标题是否完全符合我的要求,如果你有更好的标题,请告诉我 我有一个非常简单的图形设置,包含Cypher(Neo4j)-查找所有关系,只要节点中的一个关系满足条件,而不考虑搜索路径?,neo4j,cypher,graph-databases,Neo4j,Cypher,Graph Databases,请原谅这个不好的标题,我是一个基本上使用密码和图形数据库的初学者。我不确定标题是否完全符合我的要求,如果你有更好的标题,请告诉我 我有一个非常简单的图形设置,包含用户节点和电影节点,从用户到电影之间存在一种关系,称为:Review,它有一个评级属性,该属性包含用户评级(1.0-5.0)。见下图: 我认为这种设计对于电影系统来说是有意义的,因为它可以捕获用户评论。我不认为评论应该作为它们自己的节点存在,因为它们在图形中更好地表示为用户(评论者)和电影之间的关系。更不用说关系中存在的所有属性都是为
用户
节点和电影
节点,从用户
到电影
之间存在一种关系,称为:Review
,它有一个评级
属性,该属性包含用户评级(1.0-5.0)。见下图:
我认为这种设计对于电影系统来说是有意义的,因为它可以捕获用户评论。我不认为评论应该作为它们自己的节点存在,因为它们在图形中更好地表示为用户(评论者)和电影之间的关系。更不用说关系中存在的所有属性都是为了表示关系中的比例/权重/元数据,这是它们的一个很好的用例。然而,由于这种设计,我一直很难想出一个密码查询来执行以下操作:
- 查找至少有一部评论评级低于3的前十部电影
MATCH (movie:Movie)<-[review:REVIEWED]-(user:User)
RETURN movie.movieTitle, avg(review.rating) as avgRating
ORDER BY avgRating DESC
LIMIT 10
MATCH(movie:movie)您需要一个两部分的查询,首先匹配评论分数低于E 3的电影,然后平均它们的收视率
MATCH (movie:Movie)<-[review:REVIEWED]-(:User)
WHERE review.rating < 3
WITH DISTINCT movie
MATCH (movie)<-[review:REVIEWED]-(:User)
RETURN avg(review.rating) as avgRating
ORDER BY avgRating DESC
LIMIT 10
MATCH(movie:movie)一个小小的改进,在第3行,您应该将与DISTINCT movie一起使用
,这样您就不会为每个DISTINCT movie生成多行,因为这可能会扭曲您的结果。没问题!哦,在这种情况下不需要重新命名,因为movie
变量已经是您想要的,所以您可以将作为movie
部分删除。
MATCH (movie:Movie)<-[review:REVIEWED]-(:User)
WHERE review.rating < 3
WITH DISTINCT movie
MATCH (movie)<-[review:REVIEWED]-(:User)
RETURN avg(review.rating) as avgRating
ORDER BY avgRating DESC
LIMIT 10