Computer >> Máy Tính >  >> Lập trình >> MongoDB

MongoDB Tổng hợp tổng các giá trị trong một danh sách các từ điển cho tất cả các tài liệu?

Để 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 }