我正在尝试为我的电影mongo数据库编写一个查询,该数据库具有两个集合,电影和评分,其结构如下: 电影
{
"_id" : ObjectId("5bb3e0a9dac8ab419c430e94"),
"MovieId" : 3,
"MovieTitle" : "Four Rooms (1995)",
// and other unrelated fields
}
评分:
{
"_id" : ObjectId("5bb3e049dac8ab419c4223ed"),
"user_id" : 450,
"item_id" : 172,
"rating" : 4,
"timestamp" : 882372103
}
其中MovieId == item_id。 我需要找到所有电影的前十名电影标题,其中至少一项评论评分低于3。
这是我尝试查找可以正常播放的前十部电影的ID:
db.ratings.aggregate(
[
{"$group":
{
_id: {item_id:"$item_id"},
ratingAverage: {$avg: "$rating"}
}
} ,{$sort : { ratingAverage: -1 } }, {$limit : 10}
]
)
这是我的尝试,以查找评分至少低于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}
])
此返回:
ok" : 0,
"errmsg" : "The field 'rating' must be an accumulator object",
"code" : 40234,
"codeName" : "Location40234"
有人可以给我一些建议吗
答案 0 :(得分:1)
您应该这样更改$match
部分:
...
{"$match":
{ "rating":{"$lt":3} }
},
...
您可能忘了在查询{}
的地方加上$match