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

Tính tổng các thuộc tính duy nhất trong các phần tử bộ sưu tập khác nhau trong MongoDB và nhận được Giá kết quả?


Để tính tổng các thuộc tính duy nhất trong các phần tử tập hợp khác nhau, hãy sử dụng $ cond cùng với $ group. Điều này đưa ra giá kết quả.

Hãy để chúng tôi tạo một bộ sưu tập với các tài liệu -

> db.demo580.insertOne(
...    {
...       "Name":"John",
...       "Id1":"110",
...       "Id2":"111",
...       "Price":10.5
...    }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e918cebfd2d90c177b5bcae")
}
>
> db.demo580.insertOne(
... {
...    "Name":"John",
...    "Id1":"111",
...    "Id2":"",
...    "Price":9.5
... }
... );
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5e918cecfd2d90c177b5bcaf")
}

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.demo580.find();

Điều này sẽ tạo ra kết quả sau -

{ "_id" : ObjectId("5e918cebfd2d90c177b5bcae"), "Name" : "John", "Id1" : "110", "Id2" : "111", "Price" : 10.5 }
{ "_id" : ObjectId("5e918cecfd2d90c177b5bcaf"), "Name" : "John", "Id1" : "111", "Id2" : "", "Price" : 9.5 }

Sau đây là truy vấn để tính tổng các thuộc tính duy nhất trong các phần tử tập hợp khác nhau -

> db.demo580.aggregate([
...    {
...       $project: {
...          Id1: 1,
...          Id2: 1,
...          Price: 1,
...          match: {
...             $cond: [
...                {$eq: ["$Id2", ""]},
...                "$Id1",
...                "$Id2"
...             ]
...          }
...       }
...    },
...    {
...       $group: {
...          _id: '$match',
...          Price: {$sum: '$Price'},
...          resultId: {
...             $addToSet: {
...             $cond: [
...                {$eq: ['$match', '$Id1']},
...                null,
...                '$Id1'
...             ]
...          }
...       }
...    }
... },
... {$unwind: '$resultId'},
... {$match: {
...       resultId: {
...          $ne: null
...       }
...    }
... },
... {
...    $project: {
...       Id1: '$resultId',
...       Price: 1,
...       _id: 0
...    }
... }
... ])

Điều này sẽ tạo ra kết quả sau -

{ "Price" : 20, "Id1" : "110" }