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

การใช้ $push ใน Aggregation Pipeline เพื่อรวมเอกสารเป็นอาร์เรย์ใน MongoDB

รวมเอกสารหลายชิ้นเป็นอาร์เรย์เดียวด้วย $push ใน $group

ตัวดำเนินการ $push ใน $group stage ของ Aggregation Pipeline ใช้สำหรับสะสมค่าจากทุกเอกสารในกลุ่ม (group) เข้าไปในอาร์เรย์เดียว

ตัวอย่างข้อมูลทดสอบ

> db.demo399.insertOne({ Name: "Chris", Age: 21 });
> db.demo399.insertOne({ Name: "David", Age: 22 });
> db.demo399.insertOne({ Name: "Chris", Age: 21 });
> db.demo399.insertOne({ Name: "Bob", Age: 23 });
> db.demo399.insertOne({ Name: "David", Age: 22 });

แสดงข้อมูลทั้งหมด

> db.demo399.find();

ผลลัพธ์: 5 เอกสารแยกกัน

คำสั่ง Aggregation รวมทุกเอกสารเป็นอาร์เรย์เดียว

> db.demo399.aggregate([
  {
    $group: {
      _id: null,
      array: { $push: { Name: "$Name", Age: "$Age" } }
    }
  }
]);

ผลลัพธ์ที่ได้

{
  "_id": null,
  "array": [
    { "Name": "Chris", "Age": 21 },
    { "Name": "David", "Age": 22 },
    { "Name": "Chris", "Age": 21 },
    { "Name": "Bob", "Age": 23 },
    { "Name": "David", "Age": 22 }
  ]
}

คำอธิบาย

  • _id: null: หมายถึงจัดกลุ่มทุกเอกสารเป็นกลุ่มเดียว (ไม่แบ่งกลุ่ม)
  • $push: { Name: "$Name", Age: "$Age" }: สร้างออบเจกต์ใหม่จากฟิลด์ Name และ Age ของแต่ละเอกสาร แล้ว push เข้าไปในอาร์เรย์ array

ตัวดำเนินการที่เกี่ยวข้อง

  • $addToSet: คล้าย $push แต่ไม่เพิ่มค่าที่ซ้ำกัน (unique values only)
  • $push ใน $group: สะสมค่าในแต่ละกลุ่ม
  • $push ใน update(): เพิ่มค่าเข้าไปในอาร์เรย์ของเอกสารเดิม

กรณีใช้งานจริง

เหมาะสำหรับการสร้างรายงาน สรุปข้อมูล หรือเตรียมข้อมูลสำหรับ frontend ที่ต้องการข้อมูลเป็นอาร์เรย์เดียว