arrays - 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。
解决方案
我们需要应用$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"
}
}
}
}
}
])
注意:如果您只想返回平均结果,请替换$addFields
为。$project