MongoDB聚合查询以从另一个集合中查找至少包含一个匹配项的对象
我正在尝试为我的movies mongo数据库编写一个查询,该数据库有两个集合:movie和ratings,其结构如下: 电影 评级:MongoDB聚合查询以从另一个集合中查找至少包含一个匹配项的对象,mongodb,mongodb-query,Mongodb,Mongodb Query,我正在尝试为我的movies mongo数据库编写一个查询,该数据库有两个集合:movie和ratings,其结构如下: 电影 评级: { "_id" : ObjectId("5bb3e049dac8ab419c4223ed"), "user_id" : 450, "item_id" : 172, "rating" : 4, "timestamp" : 882372103 } 其中,MovieId==项目\标识。 我需要找到所有电影的前十名,至少有一部电
{
"_id" : ObjectId("5bb3e049dac8ab419c4223ed"),
"user_id" : 450,
"item_id" : 172,
"rating" : 4,
"timestamp" : 882372103
}
其中,MovieId==项目\标识。
我需要找到所有电影的前十名,至少有一部电影的评论评级低于3
db.ratings.aggregate([
{"$match":
"rating":{"$lt":3}
},
{"$group":
{
_id: "$item_id",
ratingAverage: {$avg: "$rating"}
}
},
{$lookup:
{
"from": "movie",
"localField": "_id",
"foreignField": "MovieId",
"as": "movie_details"
}},{$sort : { ratingAverage: -1 } }, {$limit : 10}
])
以下是我尝试查找最有效果的10部电影的id:
db.ratings.aggregate(
[
{"$group":
{
_id: {item_id:"$item_id"},
ratingAverage: {$avg: "$rating"}
}
} ,{$sort : { ratingAverage: -1 } }, {$limit : 10}
]
)
以下是我试图找到评级至少低于3的前10部电影
db.ratings.aggregate([
{"$match":
"rating":{"$lt":3}
},
{"$group":
{
_id: "$item_id",
ratingAverage: {$avg: "$rating"}
}
},
{$lookup:
{
"from": "movie",
"localField": "_id",
"foreignField": "MovieId",
"as": "movie_details"
}},{$sort : { ratingAverage: -1 } }, {$limit : 10}
])
本申报表:
ok" : 0,
"errmsg" : "The field 'rating' must be an accumulator object",
"code" : 40234,
"codeName" : "Location40234"
有人能给我一些建议吗?你应该像这样更改你的$match部分:
...
{"$match":
{ "rating":{"$lt":3} }
},
...
您可能忘记在$match的查询中添加{},谢谢!它刚刚解决了语法问题。然而,我没能从这个查询中得到前10部电影。您有什么建议吗?@K.U删除第一个$match部分,取而代之的是,获取所有电影分级低于3的电影的项目id列表,然后使用$filter筛选此列表中的所有电影,然后,您可以在这个过滤的评级列表中获得平均评级,并获得前十名。很抱歉,我无法为您编写一个聚合查询示例,因为我必须生成一个假数据集才能自己测试查询,但如果您尝试过,但自己无法完成,您可以将mongodump上传到某个地方,并在此处放置一个链接,这样我就可以基于该数据编写查询。