我是MongoDB的新手。我有一个电影集合,如图所示

有些电影有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
}我认为解决方案很简单,但我不能弄清楚,或者我不知道要寻找什么。任何帮助都将不胜感激。谢谢。
发布于 2018-10-04 03:22:24
你的问题是你没有MovieName in result吗?如果是这样,您应该像这样修改您的代码
db.movies.aggregate([
{
$unwind: "$MovieReview"
},
{
$group : {
_id: "$_id",
MovieName: { $first: "$MovieName" },
avgRating : { $avg : "$MovieReview.Rating" }
}
},]);
发布于 2018-10-04 05:36:44
在这种情况下,按_id分组是没有意义的。如果计算平均值所需的所有评分都包含在单个文档的MovieRating数组中,那么这就是您想要的:
db.movies.aggregate({
$addFields: {
avgRating: { $avg: "$MovieReview.Rating" }
}
})https://stackoverflow.com/questions/52634145
复制相似问题