某些电影具有MoveiReview,而某些电影具有MovieReview。我要列出的是电影的平均评分及其所有电影的名称。
{
"_id" : ObjectId("5ba65d9cdfbc44415d0edaec"),
"MovieName": "King Kong"
"avgAge" : 9.0
}
{
"_id" : ObjectId("5ba65d9cdfbc44415d0edaec"),
"MovieName": "King Kong"
"avgAge" : 9.0
}
我尝试了以下代码,但仅获得具有平均评分的ID。
db.movies.aggregate([
{ $unwind: "$MovieReview" },
{ $group : { _id: "$_id", avgRating : { $avg : "$MovieReview.Rating" }}},
]);
结果
{
"_id" : ObjectId("5ba65d9cdfbc44415d0edaec"),
"avgRating" : 9.0
}
/* 2 */
{
"_id" : ObjectId("5ba65d9cdfbc44415d0edaeb"),
"avgRating" : 10.0
}
我认为解决方案很简单,但我无法弄清楚,或者我不知道要寻找什么。任何帮助,将不胜感激。谢谢。
答案 0 :(得分:0)
您的问题是您是否没有MovieName?如果是这样,您应该像这样修改代码
db.movies.aggregate([
{
$unwind: "$MovieReview"
},
{
$group : {
_id: "$_id",
MovieName: { $first: "$MovieName" },
avgRating : { $avg : "$MovieReview.Rating" }
}
},
]);
答案 1 :(得分:0)
在这种情况下,按_id
分组是没有意义的。如果您需要计算平均值的所有等级都包含在单个文档的MovieRating
数组中,那么您需要这样做:
db.movies.aggregate({
$addFields: {
avgRating: { $avg: "$MovieReview.Rating" }
}
})