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

Tổng hợp giá trị trong mảng dictionary MongoDB

Để tính tổng các trường số trong mảng object (dictionary) trên tất cả document, dùng $unwind tách mảng rồi $group theo tên.

Dữ liệu mẫu

2 document, mỗi doc có mảng Details chứa object {Name, Value1, Value2, Value3}:
Doc 1: Chris(20,30,10), David(10,50,30)
Doc 2: Chris(20,10,20), David(30,40,10)

Pipeline aggregate

> db.demo117.aggregate([
    { $unwind: "$Details" },
    { $group: { 
        _id: "$Details.Name", 
        "Value1": { $sum: "$Details.Value1" }, 
        "Value2": { $sum: "$Details.Value2" }, 
        "Value3": { $sum: "$Details.Value3" } 
    }}
]);

Kết quả

{ "_id" : "David", "Value1" : 40, "Value2" : 90, "Value3" : 40 }
{ "_id" : "Chris", "Value1" : 40, "Value2" : 40, "Value3" : 30 }

Giải thích:

  1. $unwind: "$Details": Biến mảng Details thành các document riêng (4 doc từ 2 doc gốc)
  2. $group: Nhóm theo Details.Name (Chris/David)
  3. $sum: Cộng dồn từng trường Value1, Value2, Value3 riêng biệt

Kết quả chi tiết:

  • Chris: Value1=20+20=40, Value2=30+10=40, Value3=10+20=30
  • David: Value1=10+30=40, Value2=50+40=90, Value3=30+10=40

Pattern này dùng cho báo cáo, analytics trên dữ liệu lồng mảng object.