簡體   English   中英

如何使用聚合從 mongoDB 中對象的嵌套數組中提取信息

[英]How to use aggregation to pull information from a nested array on objects in mongoDB

我正在嘗試掌握 mongoDB 中的聚合,我是新手,我想我有點迷路了。 我有一個用戶集合,每個用戶都有一個社交網絡數組,這個數組中的每個項目都是一個對象。 我如何僅從給定的社交網絡/對象/對象中獲取價值。

{
 "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。

我開始玩聚合,但一直沒有弄明白。

首先,我們需要展平socials數組。 然后,我們按社交type + 'user' 字段和sum( maleFollowers + femaleFollowers)

使用$match運算符,我們過濾所需的社交網絡。

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"
        ]
      }
    }
  }
])

蒙戈游樂場

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM