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

MongoDB Query: หาผลรวมฟิลด์เฉพาะตามเงื่อนไข Status

Sum ฟิลด์เฉพาะกรองตาม Status ด้วย Aggregation

บทความนี้สาธิตการใช้ Aggregation Pipeline: $match กรองเงื่อนไข แล้ว $group จัดกลุ่มและ $sum หาผลรวม

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

> db.getSumOfFieldsDemo.insertOne({"Customer_Id":101,"Price":50,"Status":"Active"});
{ "acknowledged": true, "insertedId": ObjectId("5e06cec29e4dae213890ac55") }
> db.getSumOfFieldsDemo.insertOne({"Customer_Id":102,"Price":200,"Status":"Inactive"});
{ "acknowledged": true, "insertedId": ObjectId("5e06ced19e4dae213890ac56") }
> db.getSumOfFieldsDemo.insertOne({"Customer_Id":101,"Price":3000,"Status":"Active"});
{ "acknowledged": true, "insertedId": ObjectId("5e06cedd9e4dae213890ac57") }
> db.getSumOfFieldsDemo.insertOne({"Customer_Id":103,"Price":400,"Status":"Active"});
{ "acknowledged": true, "insertedId": ObjectId("5e06cee79e4dae213890ac58") }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.getSumOfFieldsDemo.find().pretty();

ขั้นตอนที่ 3: Aggregation Pipeline Sum ราคาของ Active เท่านั้น จัดกลุ่มตาม Customer_Id

> db.getSumOfFieldsDemo.aggregate([
    { $match: { Status: "Active" } },
    { $group: { _id: "$Customer_Id", TotalSum: { $sum: "$Price" } } }
]);

ผลลัพธ์ที่ได้

{ "_id": 103, "TotalSum": 400 }
{ "_id": 101, "TotalSum": 3050 }

สรุป: Pipeline นี้ทำได้ในขั้นตอนเดียว: กรอง Status = Active -> จัดกลุ่มตาม Customer_Id -> รวม Price ด้วย $sum ประสิทธิภาพดีกว่าการดึงมาทั้งหมดมาคำนวณฝั่งแอปพลิเคชัน