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

กรอบการรวมเพื่อให้ได้ชื่อนักเรียนที่มีคะแนนสอบน้อยกว่าค่าเฉลี่ยรวมของการทดสอบทั้งหมดหนึ่งคะแนน


สำหรับสิ่งนี้ คุณสามารถใช้ aggregate() เราได้พิจารณาบันทึกการทดสอบเป็น “Value1”, “Value2” เป็นต้น ให้เราสร้างคอลเลกชันพร้อมเอกสาร -

> db.demo432.insertOne(
...    {
...       "_id" : 101,
...       "Name" : "David",
...       "Value1" : 67,
...       "Value2" : 87,
...       "Value3" : 78
...    }
... )
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo432.insertOne(
...    {
...       "_id" : 102,
...       "Name" : "Sam",
...       "Value1" : 98,
...       "Value2" : 45,
...       "Value3" : 90
...    }
... )
{ "acknowledged" : true, "insertedId" : 102 }

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo432.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : 101, "Name" : "David", "Value1" : 67, "Value2" : 87, "Value3" : 78 }
{ "_id" : 102, "Name" : "Sam", "Value1" : 98, "Value2" : 45, "Value3" : 90 }

ต่อไปนี้เป็นคำถามเพื่อให้ได้ชื่อนักเรียนที่มีการทดสอบหนึ่งคะแนนน้อยกว่าค่าเฉลี่ยของการทดสอบทั้งหมด -

> db.demo432.aggregate([{
...    $project: {
...       Name: '$Name',
...       Value1: '$Value1',
...       average: {
...          $avg: ['$Value1', '$Value2', '$Value3']
...          }
...       }
...    },
...    {
...    $group: {
...       _id: null,
...       NameValue1: {
...          $push: {
...             "Name": "$Name",
...             "Value1": "$Value1"
...          }
...       },
...       totalAverage: {
...          $avg: '$average'
...          }
...       }
...    },
...    { $project:
...    { lessthanAverageNames:
...    {
...       $map:
...       {
...          input: {
...             $filter: {
...                input: "$NameValue1",
...                as: "out",
...                cond: {
...                   $lt: ["$$out.Value1", "$totalAverage"]
...                   }
...                }
...             },
...             as: "o",
...             in: "$$o.Name"
...             }
...          }
...       }
...    }
... ]);

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

{ "_id" : null, "lessthanAverageNames" : [ "David" ] }