สำหรับกรณีนี้ ให้ใช้ $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 } ] }