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

MongoDB Aggregate: การจัดกลุ่มผลลัพธ์หลายอย่างพร้อมกัน

ใช้ $facet เพื่อรันหลาย Pipeline พร้อมกัน

$facet ช่วยให้สามารถรวมข้อมูลหลายแบบ (เช่น จัดกลุ่มตามชื่อ และจัดกลุ่มตามหมวดหมู่) ในคำสั่ง aggregate เดียว

สร้างข้อมูลตัวอย่าง

> db.demo765.insertOne({ Name:"John", "Category":"ComputerScience", "SubjectName":"MongoDB", "Marks":75 });
> db.demo765.insertOne({ Name:"John", "Category":"ComputerScience", "SubjectName":"MySQL", "Marks":85 });
> db.demo765.insertOne({ Name:"Chris", "Category":"10th", "SubjectName":"Math", "Marks":98 });

แสดงข้อมูลทั้งหมด

> db.demo765.find();

ผลลัพธ์:

{ "_id" : ObjectId("5eb054525637cd592b2a4b01"), "Name" : "John", "Category" : "ComputerScience", "SubjectName" : "MongoDB", "Marks" : 75 }
{ "_id" : ObjectId("5eb054525637cd592b2a4b02"), "Name" : "John", "Category" : "ComputerScience", "SubjectName" : "MySQL", "Marks" : 85 }
{ "_id" : ObjectId("5eb054535637cd592b2a4b03"), "Name" : "Chris", "Category" : "10th", "SubjectName" : "Math", "Marks" : 98 }

คิวรี Aggregate ด้วย $facet

> db.demo765.aggregate([
    { "$facet": {
        "ListOfName": [
            { "$group": { "_id": "$Name", "Marks": { "$sum": "$Marks" } } },
            { "$project": { "_id": false, "Name": "$_id", "Marks": 1 } }
        ],
        "ListOfCategory": [
            { "$group": { "_id": "$Category", "Marks": { "$sum": "$Marks" } } },
            { "$project": { "_id": false, "Category": "$_id", "Marks": 1 } }
        ]
    }}
]).pretty()

ผลลัพธ์

{
    "ListOfName" : [
        { "Marks" : 98, "Name" : "Chris" },
        { "Marks" : 160, "Name" : "John" }
    ],
    "ListOfCategory" : [
        { "Marks" : 98, "Category" : "10th" },
        { "Marks" : 160, "Category" : "ComputerScience" }
    ]
}