Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

รวมคุณสมบัติเฉพาะในองค์ประกอบคอลเลกชันที่แตกต่างกันใน MongoDB และรับราคาที่เป็นผลลัพธ์?


ในการคำนวณผลรวมของคุณสมบัติเฉพาะในองค์ประกอบคอลเลกชันต่างๆ ให้ใช้ $cond ร่วมกับ $group ซึ่งจะทำให้ได้ราคาผลลัพธ์

ให้เราสร้างคอลเลกชันที่มีเอกสาร -

> 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")
}

แสดงเอกสารทั้งหมดจากคอลเล็กชันโดยใช้วิธี find() -

> db.demo580.find();

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

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

ต่อไปนี้เป็นแบบสอบถามเพื่อรวมคุณสมบัติเฉพาะในองค์ประกอบคอลเลกชันที่แตกต่างกัน -

> 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
...    }
... }
... ])

สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -

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