【发布时间】:2018-10-07 04:40:17
【问题描述】:
我正在尝试为我的电影 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 的前 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"
有人可以给我一些关于如何解决这个问题的建议
【问题讨论】:
标签: mongodb mongodb-query