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

วิธีดึงอาร์เรย์จากคอลเลกชัน MongoDB ด้วย Aggregate Framework

ใช้ Aggregate Framework พร้อม $unwind และ $group เพื่อดึงข้อมูลจากอาร์เรย์ซ้อนและรวมเป็นอาร์เรย์เดียว เริ่มต้นด้วยการสร้างคอลเลกชันตัวอย่าง:

> db.getArrayDemo.insertOne(
  {
    "CustomerId":101,
    "CustomerDetails":[
      {
        "CustomerName":"Larry",
        "CustomerFriendDetails":[
          { "CustomerFriendName":"Sam" },
          { "CustomerFriendName":"Robert" }
        ]
      },
      {
        "CustomerName":"Chris",
        "CustomerFriendDetails":[
          { "CustomerFriendName":"David" },
          { "CustomerFriendName":"Carol" }
        ]
      }
    ]
  }
);
{ "acknowledged" : true, "insertedId" : ObjectId("5cda4949b50a6c6dd317adb7") }

แสดงเอกสาร:

> db.getArrayDemo.find().pretty();
{ "_id" : ObjectId("5cda4949b50a6c6dd317adb7"), "CustomerId" : 101, "CustomerDetails" : [ { "CustomerName" : "Larry", "CustomerFriendDetails" : [ { "CustomerFriendName" : "Sam" }, { "CustomerFriendName" : "Robert" } ] }, { "CustomerName" : "Chris", "CustomerFriendDetails" : [ { "CustomerFriendName" : "David" }, { "CustomerFriendName" : "Carol" } ] } ] }

คิวรี่ Aggregate เพื่อดึงชื่อเพื่อนทั้งหมดมารวมเป็นอาร์เรย์เดียว:

> db.getArrayDemo.aggregate([
  { "$unwind": "$CustomerDetails" },
  { "$unwind": "$CustomerDetails.CustomerFriendDetails"},
  {
    "$group": {
      "_id": null,
      "CustomerFriendDetails": { "$push": "$CustomerDetails.CustomerFriendDetails.CustomerFriendName" }
    }
  }
]);
{ "_id" : null, "CustomerFriendDetails" : [ "Sam", "Robert", "David", "Carol" ] }

คำอธิบายขั้นตอน:

  1. $unwind: "$CustomerDetails" - แยกอาร์เรย์ CustomerDetails ให้แต่ละเอกสารมีเพียง 1 รายการ
  2. $unwind: "$CustomerDetails.CustomerFriendDetails" - แยกอาร์เรย์เพื่อนอีกชั้น
  3. $group พร้อม $push - รวมชื่อเพื่อนทั้งหมดกลับเป็นอาร์เรย์เดียว