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

การรวม MongoDB เพื่อรวมคุณสมบัติแต่ละรายการบนวัตถุในอาร์เรย์ข้ามเอกสาร


สำหรับสิ่งนี้ ให้ใช้ aggregate() ใน MongoDB ให้เราสร้างคอลเลกชันที่มีเอกสารก่อน -

> db.demo131.insertOne(
...    {
...       "_id": 101,
...       "Details": [
...          {
...             "PlayerScore": 500,
...             "PlayerName": "Chris"
...          },
...          {
...             "PlayerScore": 400,
...             "PlayerName": "David"
...          }
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 101 }
> db.demo131.insertOne(
...    {
...       "_id": 102,
...       "Details": [
...          {
...             "PlayerScore": 600,
...             "PlayerName": "Chris"
...          },
...          {
...             "PlayerScore": 200,
...             "PlayerName": "David"
...          }
...       ]
...    }
... );
{ "acknowledged" : true, "insertedId" : 102 }

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

> db.demo131.find();

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

{ "_id" : 101, "Details" : [ { "PlayerScore" : 500, "PlayerName" : "Chris" }, { "PlayerScore" : 400, "PlayerName" : "David" } ] }
{ "_id" : 102, "Details" : [ { "PlayerScore" : 600, "PlayerName" : "Chris" }, { "PlayerScore" : 200, "PlayerName" : "David" } ] }

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

> db.demo131.aggregate([
...    { $unwind: "$Details" },
...    {
...       $group: {
...          _id:"$Details.PlayerName",
...          Value:{$sum:"$Details.PlayerScore"}
...       }
...    },
... {
...    $group: {
...       _id: 0,
...       Details:{ $push: {Details:"$_id",Value:"$Value"}}
...       }
...    },
... {
...    $project:{Details:1,_id:0}
... } ])

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

{ "Details" : [ { "Details" : "David", "Value" : 600 }, { "Details" : "Chris", "Value" : 1100 } ] }