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

คำนวณผลรวมของเอกสารเฉพาะด้วย MongoDB Aggregation

เพื่อหาผลรวมของเอกสารเฉพาะ ให้ใช้ $sum ร่วมกับ $group และ $match ใน MongoDB Aggregation

สร้างคอลเลกชันพร้อมเอกสารที่มีอาร์เรย์ UsersDetails (มี FirstUser และ TotalLikes):

> db.calculateSumOfDocument.insertOne({"ListOfUsers":["Carol","Bob"],"UsersDetails":[{"FirstUser":"Carol","TotalLikes":20},{"FirstUser":"Bob","TotalLikes":45}]}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5e084e9125ddae1f53b6220c") } 
> db.calculateSumOfDocument.insertOne({"ListOfUsers":["Carol","Bob"],"UsersDetails":[{"FirstUser":"Carol","TotalLikes":60},{"FirstUser":"Bob","TotalLikes":50}]}); 
{ "acknowledged" : true, "insertedId" : ObjectId("5e084f6125ddae1f53b6220d") }

แสดงเอกสารทั้งหมด:

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

ผลลัพธ์ - 2 เอกสาร แต่ละอันมี UsersDetails 2 รายการ (Carol และ Bob):

คำสั่ง Aggregation: $match กรองเฉพาะ Carol, $unwind แยก UsersDetails, $match อีกครั้ง, $group คำนวณ $sum ของ TotalLikes:

> db.calculateSumOfDocument.aggregate([ 
...     { "$match": { "UsersDetails.FirstUser": "Carol" } }, 
...     { "$unwind" : "$UsersDetails" }, 
...     { "$match": { "UsersDetails.FirstUser": "Carol" } }, 
...     { "$group": { 
...         "_id": null, 
...         "total": { "$sum": "$UsersDetails.TotalLikes" } 
...     } } 
... ]);

ผลลัพธ์ - ผลรวม TotalLikes ของ Carol ทั้งสองเอกสาร = 20 + 60 = 80: