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

MongoDB Multidimensional Array Projection

การ Project (ดึงเฉพาะบางส่วน) อาร์เรย์หลายมิติใน MongoDB

เมื่อมีอาร์เรย์ซ้อนอาร์เรย์ (Nested Arrays) ต้องใช้ Aggregation Pipeline ร่วมกับ $unwind เพื่อ "แบน" โครงสร้างก่อนจึงจะเลือกข้อมูลได้ละเอียด

ตัวอย่างข้อมูล: คะแนนนักเรียนแบบหลายมิติ

> db.multiDimensionalArrayProjection.insertOne({
    "StudentFirstName": "Chris",
    "StudentMarks": [ [98, 99], [56, 79] ]
});

Pipeline: ดึงคะแนนตัวที่ 2 ของชุดที่ 1 (คือ 99)

> db.multiDimensionalArrayProjection.aggregate([
    { $unwind: '$StudentMarks' },      // แบนชั้นนอก: ได้ [98,99] และ [56,79]
    { $limit: 1 },                     // เลือกชุดแรก ([98,99])
    { $project: { _id: 0, StudentMarks: 1 } }, // เก็บเฉพาะ StudentMarks
    { $unwind: '$StudentMarks' },      // แบนชั้นใน: ได้ 98, 99
    { $skip: 1 },                      // ข้าม 98
    { $limit: 1 }                      // เลือก 99
]);

ผลลัพธ์

{ "StudentMarks" : 99 }

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

  1. $unwind ครั้งแรก: แยกอาร์เรย์ชั้นนอกออกเป็นเอกสารย่อย 2 เอกสาร
  2. $limit: 1: เก็บเอกสารย่อยแรก (คือ [98, 99])
  3. $project: ตัด _id ออก เก็บเฉพาะ StudentMarks
  4. $unwind ครั้งที่สอง: แยกอาร์เรย์ชั้นในออกเป็น 98 และ 99
  5. $skip: 1 + $limit: 1: ข้ามตัวแรก เอาตัวที่สอง (99)

หมายเหตุ

  • MongoDB 4.4+ รองรับ $arrayElemAt และ $first/$last ใน $project ได้โดยตรง ไม่ต้อง $unwind หลายรอบ
  • ตัวอย่างนี้แสดงหลักการพื้นฐานของการจัดการ Nested Array