Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

MongoDB Aggregate: หาค่าเฉลี่ยจากเอกสารและองค์ประกอบอาร์เรย์


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