Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Tính tổng tài liệu cụ thể với MongoDB Aggregation

Để tính tổng, sử dụng $sum và nhóm tài liệu bằng $group trong aggregation pipeline.

Tạo collection với mảng UsersDetails chứa 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") }

Hiển thị dữ liệu (2 tài liệu, mỗi tài liệu có 2 user Carol và Bob):

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

Pipeline: $match lọc Carol, $unwind mảng UsersDetails, $match lại Carol, $group tính tổng TotalLikes:

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

Kết quả tổng TotalLikes của Carol: 20 + 60 = 80: