首页 > 解决方案 > mongo 数组中所有集合中 where 条件的平均值

问题描述

我需要在 mongo 文档中找到病房 2 的平均年龄。

  {
            "_id" : ObjectId("57113238bde91693e9ff69e7"),
            "docname" : "Arthur Hovsepyan",
            "job_desc" : "Hepatologist",
            "sex" : "male",
            "jobtype" : "fulltime",
            "office" : "room 448",
            "email" : "arturchik@hotmail.com",
            "phone_number" : 862124343,
            "address" : "68 Peterburg street,waterford",
            "hours" : 12,
            "patients" : [
                    {
                            "name" : "Jenny Power",
                            "ward_no" : 1,
                            "sex" : "female",
                            "termdays" : 2,
                            "illness_type" : "minor",
                            "age" : 22,
                            "phone_number" : 877285221,
                            "address" : "63 Johnston street ,Waterford"
                    },
                    {
                            "name" : "Marie Peters",
                            "ward_no" : 2,
                            "sex" : "female",
                            "termdays" : 0,
                            "illness_type" : "minor",
                            "age" : 21,
                            "phone_number" : 862145992,
                            "address" : "99 Grange,Waterford"
                    },
                    {
                            "name" : "Philip John",
                            "ward_no" : 2,
                            "sex" : "male",
                            "termdays" : 10,
                            "illness_type" : "serious",
                            "age" : 31,
                            "phone_number" : 861125981,
                            "address" : "12 Monvoy Bridge,Waterford"
                    },
                    {
                            "name" : "Marta Peters",
                            "ward_no" : 3,
                            "sex" : "female",
                            "termd7ays" : 0,
                            "illness_type" : "minor",
                            "age" : 31,
                            "phone_number" : 862125981,
                            "address" : "100 Grange Manor,Waterford"
                    }
            ]
    }

我需要找到 2 号病房的平均年龄。我正在尝试计算我的集合中每个文档的数组的 eah 值的平均聚合运算,其中病房号 =2。

标签: arraysmongodbaverage

解决方案


我们需要应用$filter运算符来仅过滤ward_no = 2,并且$letage array从上一步过滤返回, $avg运算符返回预期结果。

试试这个:

db.collection.aggregate([
  {
    $addFields: {
      avg: {
        $avg: {
          $let: {
            vars: {
              input: {
                $filter: {
                  input: "$patients",
                  cond: { $eq: [ "$$this.ward_no", 2 ] }
                }
              }
            },
            in: "$$input.age"
          }
        }
      }
    }
  }
])

Mongo游乐场| 所有文件的平均年龄

注意:如果您只想返回平均结果,请替换$addFields为。$project


推荐阅读