Я пытаюсь написать запрос для моей базы данных фильмов о монго, в которой есть две коллекции, фильм и рейтинги со следующей структурой: фильм
{
"_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.Мне нужно найти топ-10 названий фильмов всех фильмов, по крайней мере, с одним рейтингом рецензии менее 3.
Вот моя попытка найти идентификатор топ-10 фильма, который работает:
db.ratings.aggregate(
[
{"$group":
{
_id: {item_id:"$item_id"},
ratingAverage: {$avg: "$rating"}
}
} ,{$sort : { ratingAverage: -1 } }, {$limit : 10}
]
)
Вот моя попытка найти 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"
Может кто-нибудь дать мне несколько советов покак это сделать