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

Tổng hợp phần tử mảng con trong MongoDB aggregation ($first + $sum)

Sử dụng $unwind, $group với $first và $sum để tính tổng tất cả phần tử trừ phần tử đầu. Tạo collection:

> db.demo610.insertOne({Values:[10,20,30,40,50]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e9747b8f57d0dc0b182d62e") }

Hiển thị dữ liệu:

> db.demo610.find().pretty()

Pipeline: Unwind → Group lấy first và sum tất cả → Project trừ first khỏi sum → Group tổng cuối:

> db.demo610.aggregate([
...   {$unwind:"$Values"},
...   {$group:{"_id":"$_id", "1st":{$first:"$Values"}, "All":{$sum:"$Values"}}},
...   {$project:{"_id":"$_id", "SumOfAllMinus1st":{$subtract:["$All","$1st"]}}},
...   {$group:{"_id":null, "SumOfAllExcept1stValue":{$sum:"$SumOfAllMinus1st"}}}
... ]);

Kết quả: 20+30+40+50 = 140


Cách hiện đại (MongoDB 4.4+): Dùng $reduce hoặc $slice + $sum đơn giản hơn: {$project: {sum: {$sum: {$slice: ["$Values", 1, {$size: "$Values"}]}}}} (bỏ phần tử index 0).