首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用聚合从mongoDB中对象的嵌套数组中提取信息

如何使用聚合从mongoDB中对象的嵌套数组中提取信息
EN

Stack Overflow用户
提问于 2020-03-28 18:01:00
回答 1查看 36关注 0票数 0

我正在尝试掌握mongoDB中聚合的诀窍,我是个新手,我想我有点迷路了。我有一个用户集合,每个用户都有一个社交网络数组,这个数组中的每个项目都是一个对象。如何仅从给定的社交网络对象获取价值。

代码语言:javascript
复制
{
 "user":{
     "_id": "d10430c8-e59",
     "username": "John",
     "password": "f7wei93",
     "location": "UK",
     "gender": "Male",
     "age": 26,
     "socials": [
        {
            "type": "instagram",
            "maleFollowers": 23000,
            "femaleFollowers": 65000,
            "posts": 5400,
            "avgFollowerAge": 22
        },
        {
            "type": "facebook",
            "maleFollowers": 4000,
            "femaleFollowers": 6700,
            "posts": 330,
            "avgFollowerAge": 25
        },
        {
            "type": "snapchat",
            "maleFollowers": 873,
            "femaleFollowers": 1200,
            "posts": 1200,
            "avgFollowerAge": 21
        },

     ]
 }
}

我想要获取数组中给出的每个社交网络类型的totalFollowersCount ( maleFollowers + femaleFollowers)。例如,"instagram“、"snapchat”只会给我这两个特定网络的totalFollowersCount。

我开始尝试聚合,但一直没有弄明白。

EN

回答 1

Stack Overflow用户

发布于 2020-03-28 18:13:08

首先,我们需要展平socials数组。然后,我们按type + 'user‘字段和sum( maleFollowers + femaleFollowers)进行分组。

使用$match运算符,我们可以过滤所需的社交网络。

代码语言:javascript
复制
db.users.aggregate([
  {
    $unwind: "$user.socials"
  },
  {
    $group: {
      _id: {
        user: "$user._id",
        type: "$user.socials.type"
      },
      "totalFollowersCount": {
        $sum: {
          $add: [
            "$user.socials.femaleFollowers",
            "$user.socials.maleFollowers"
          ]
        }
      }
    }
  },
  {
    $match: {
      "_id.type": {
        $in: [
          "instagram",
          "snapchat"
        ]
      }
    }
  }
])

MongoPlayground

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60899668

复制
相关文章

相似问题

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