MongoDB 汇总以获取文档和数组元素的平均值?
为此,请使用 $avg 以及 $group 和 aggregate()。让我们创建一个带有文档的集合 −
> db.demo598.insertOne( ... { ... Information:'Student', ... id:100, ... details:[ ... {Name:'Chris',Marks:75}, ... {Name:'Bob',Marks:55} ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e947fccf5f1e70e134e2694") } > db.demo598.insertOne( ... { ... Information:'Student', ... id:101, ... details:[ ... {Name:'Chris',Marks:75}, ... {Name:'Bob',Marks:45} ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e947fcdf5f1e70e134e2695") }
在 find() 方法的帮助下显示集合中的所有文档 −
> db.demo598.find();
这将产生以下输出 −
{ "_id" : ObjectId("5e947fccf5f1e70e134e2694"), "Information" : "Student", "id" : 100, "details" : [ { "Name" : "Chris", "Marks" : 75 }, { "Name" : "Bob", "Marks" : 55 } ] } { "_id" : ObjectId("5e947fcdf5f1e70e134e2695"), "Information" : "Student", "id" : 101, "details" : [ { "Name" : "Chris", "Marks" : 75 }, { "Name" : "Bob", "Marks" : 45 } ] }
以下是对文档和数组元素求平均值的查询 −
> db.demo598.aggregate([ ... ... { "$group": { ... "_id": "Information", ... "id": { "$avg": "$id" }, ... "details": { "$push": "$details" } ... }}, ... { "$unwind": "$details" }, ... { "$unwind": "$details" }, ... { "$group": { ... "_id": { "Information": "$_id", "Name": "$details.Name" }, ... "id": { "$avg": "$id" }, ... "AvgValue": { "$avg": "$details.Marks" } ... }}, ... { "$sort": { "_id": 1 } }, ... { "$group": { ... "_id": "$_id.Information", ... "id": { "$avg": "$id" }, ... "details": { "$push": { ... "Name": "$_id.Name", ... "MarksAvg": "$AvgValue" ... }} ... }} ... ]).pretty();
这将产生以下输出 −
{ "_id" : "Information", "id" : 100.5, "details" : [ { "Name" : "Bob", "MarksAvg" : 50 }, { "Name" : "Chris", "MarksAvg" : 75 } ] }
广告