Để tổng hợp tổng các giá trị trong danh sách từ điển, hãy sử dụng $ sum cùng với tổng hợp (). Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -
> db.demo117.insertOne( ... { ... ID:101, ... Details:[ ... { ... Name:'Chris', ... Value1:20, ... Value2:30, ... Value3:10 ... }, ... { ... Name:'David', ... Value1:10, ... Value2:50, ... Value3:30 ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e2f02ced8f64a552dae6361") } > db.demo117.insertOne( ... { ... ID:102, ... Details:[ ... { ... Name:'Chris', ... Value1:20, ... Value2:10, ... Value3:20 ... }, ... { ... Name:'David', ... Value1:30, ... Value2:40, ... Value3:10 ... } ... ] ... } ... ); { "acknowledged" : true, "insertedId" : ObjectId("5e2f02ced8f64a552dae6362") }
Hiển thị tất cả các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find () -
> db.demo117.find();
Điều này sẽ tạo ra kết quả sau -
{ "_id" : ObjectId("5e2f02ced8f64a552dae6361"), "ID" : 101, "Details" : [ { "Name" : "Chris", "Value1" : 20, "Value2" : 30, "Value3" : 10 }, { "Name" : "David", "Value1" : 10, "Value2" : 50, "Value3" : 30 } ] } { "_id" : ObjectId("5e2f02ced8f64a552dae6362"), "ID" : 102, "Details" : [ { "Name" : "Chris", "Value1" : 20, "Value2" : 10, "Value3" : 20 }, { "Name" : "David", "Value1" : 30, "Value2" : 40, "Value3" : 10 } ] }
Sau đây là truy vấn để tổng hợp tổng các giá trị trong danh sách từ điển cho tất cả các tài liệu -
> db.demo117.aggregate([{ ... $unwind: "$Details" ... }, { ... $group: { ... _id: "$Details.Name", ... "Value1": { $sum: "$Details.Value1" }, ... "Value2": { $sum: "$Details.Value2" }, ... "Value3": { $sum: "$Details.Value3" } ... } ... }])
Điều này sẽ tạo ra kết quả sau -
{ "_id" : "David", "Value1" : 40, "Value2" : 90, "Value3" : 40 } { "_id" : "Chris", "Value1" : 40, "Value2" : 40, "Value3" : 30 }