计算mongodb聚合管道中组内的百分比

问题描述 投票:0回答:1

使用聚合管道在mongodb中的组内计算百分比。假设我有一个收藏集

[{
 "Name":"xyz" 
 "Area":"London",
 "Sex":"Male",
 },{
"Name":"abc" 
 "Area":"Chile",
 "Sex":"Female
}...]

我想要每个区域的男性/女性百分比。不是男性/女性总数的百分比。

mongodb mongodb-query aggregation-framework
1个回答
0
投票

我们需要按区域分组,将男性/女性/总数相加,并转换为所需的结果。

尝试这个:

db.collection.aggregate([
  {
    $group: {
      _id: "$Area",
      total: {
        $sum: 1
      },
      Male: {
        $sum: {
          $cond: [
            {
              $eq: [ "$Sex", "Male" ]
            },
            1,
            0
          ]
        }
      },
      Female: {
        $sum: {
          $cond: [
            {
              $eq: [ "$Sex", "Female" ]
            },
            1,
            0
          ]
        }
      }
    }
  },
  {
    $group: {
      _id: null,
      area: {
        $push: {
          k: "$_id",
          v: {
            Male: {
              $multiply: [
                {
                  $divide: [ "$Male", "$total" ]
                },
                100
              ]
            },
            Female: {
              $multiply: [
                {
                  $divide: [ "$Female", "$total" ]
                },
                100
              ]
            }
          }
        }
      }
    }
  },
  {
    $replaceRoot: {
      newRoot: {
        $arrayToObject: "$area"
      }
    }
  }
])

MongoPlayground

© www.soinside.com 2019 - 2024. All rights reserved.