首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongodb从带有moviename的嵌套数组中获取平均评分

Mongodb从带有moviename的嵌套数组中获取平均评分
EN

Stack Overflow用户
提问于 2018-10-04 03:11:45
回答 2查看 107关注 0票数 2

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

有些电影有MoveiReview,而有些电影还没有MovieReview。我想要的是列出电影的平均评分和它的所有电影的名称。

代码语言:javascript
复制
{
    "_id" : ObjectId("5ba65d9cdfbc44415d0edaec"),
    "MovieName": "King Kong"
    "avgAge" : 9.0
}
{
    "_id" : ObjectId("5ba65d9cdfbc44415d0edaec"),
    "MovieName": "King Kong"
    "avgAge" : 9.0
}

我尝试了下面的代码,但只得到了平均评级的id。

代码语言:javascript
复制
db.movies.aggregate([

    { $unwind: "$MovieReview" },
    { $group : { _id: "$_id", avgRating : {  $avg : "$MovieReview.Rating" }}},

]);

结果

代码语言:javascript
复制
{
    "_id" : ObjectId("5ba65d9cdfbc44415d0edaec"),
    "avgRating" : 9.0
}

/* 2 */
{
    "_id" : ObjectId("5ba65d9cdfbc44415d0edaeb"),
    "avgRating" : 10.0
}

我认为解决方案很简单,但我不能弄清楚,或者我不知道要寻找什么。任何帮助都将不胜感激。谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-10-04 03:22:24

你的问题是你没有MovieName in result吗?如果是这样,您应该像这样修改您的代码

代码语言:javascript
复制
db.movies.aggregate([
  {
    $unwind: "$MovieReview" 
  },
  { 
    $group : { 
      _id: "$_id", 
      MovieName: { $first: "$MovieName" }, 
      avgRating : {  $avg : "$MovieReview.Rating" }
    }
  },

]);

票数 0
EN

Stack Overflow用户

发布于 2018-10-04 05:36:44

在这种情况下,按_id分组是没有意义的。如果计算平均值所需的所有评分都包含在单个文档的MovieRating数组中,那么这就是您想要的:

代码语言:javascript
复制
db.movies.aggregate({
    $addFields: {
        avgRating: { $avg: "$MovieReview.Rating" }
    }
})
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52634145

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档