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

Tổng hợp (Aggregate) tổng số lượng trong một nhóm với MongoDB

Để tính tổng, đếm số lượng có điều kiện trong một nhóm (group) duy nhất, MongoDB Aggregation sử dụng $group kết hợp $sum và $cond. Điều này cho phép tính nhiều metric khác nhau trong một lần quét dữ liệu.

1. Tạo bộ sưu tập điểm số

> db.demo406.insertOne({ "Score": 35 });
> db.demo406.insertOne({ "Score": 55 });
> db.demo406.insertOne({ "Score": 35 });
> db.demo406.insertOne({ "Score": 45 });
> db.demo406.insertOne({ "Score": 65 });
> db.demo406.insertOne({ "Score": 45 });

2. Xem dữ liệu

> db.demo406.find();

Kết quả: 6 tài liệu với các Score: 35, 55, 35, 45, 65, 45.

3. Aggregation: Tính 3 chỉ số trong 1 group

> db.demo406.aggregate([
    {
        $group: {
            _id: null,
            Score1: { $sum: { $cond: [{ $eq: ["$Score", 35] }, 1, 0] } }, // Đếm Score = 35
            Score2: { $sum: { $cond: [{ $ne: ["$Score", 35] }, 1, 0] } }, // Đếm Score != 35
            Score3: { $sum: { $cond: [{ $ne: ["$Score", 59] }, "$Score", 0] } } // Tổng Score != 59
        }
    }
]);

4. Kết quả

{ "_id": null, "Score1": 2, "Score2": 4, "Score3": 280 }

Giải thích:

  • Score1: Có 2 bản ghi Score = 35.
  • Score2: Có 4 bản ghi Score ≠ 35 (55, 45, 65, 45).
  • Score3: Tổng các Score ≠ 59 (tất cả vì không có 59) = 35+55+35+45+65+45 = 280.

Mẹo: Dùng $facet (MongoDB 3.4+) để chạy nhiều group song song trong 1 pipeline.