ใช้ $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" }
]
}