MongoDB中按ID匹配并计算data数组内val字段的平均值
按ID计算嵌套数组val字段的平均值
需求:匹配集合collection1中指定_id的文档,计算其data数组内所有val字段的平均值。
示例集合数据
[{ "_id": 1, "data": [ {"val": 2}, {"val": 4}, {"val": 6} ] }, { "_id": 2, "data": [ {"val": 99} ] }]
实现方法(MongoDB聚合查询)
直接通过数据库聚合管道完成计算,无需在应用层处理数据:
db.collection1.aggregate([ // 匹配指定_id的目标文档 { $match: { _id: 1 } }, // 将data数组拆分为单独文档 { $unwind: "$data" }, // 计算所有val字段的平均值 { $group: { _id: "$_id", avgVal: { $avg: "$data.val" } }} ])
查询结果
当指定_id:1时,返回结果为:
[{ "_id": 1, "avgVal": 4 }]
如果仅需返回平均值数值,可在聚合末尾添加$project阶段简化输出:
db.collection1.aggregate([ { $match: { _id: 1 } }, { $unwind: "$data" }, { $group: { _id: "$_id", avgVal: { $avg: "$data.val" } }}, { $project: { _id: 0, avgVal: 1 } } ])
返回结果:
[{ "avgVal": 4 }]
内容的提问来源于stack exchange,提问作者parth hirpara
相关产品推荐
相关产品推荐

