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

การแสดงเฉพาะองค์ประกอบที่พบในอาร์เรย์ของ MongoDB

ดึงเฉพาะองค์ประกอบที่ต้องการจากอาร์เรย์ใน MongoDB

บทความนี้สาธิตวิธีการแสดงเฉพาะองค์ประกอบ (element) ที่ตรงตามเงื่อนไขภายในอาร์เรย์ โดยใช้ Aggregation Pipeline ประกอบด้วย $match, $unwind, และ $project

ขั้นตอนที่ 1: สร้าง Collection และเพิ่มข้อมูลตัวอย่าง

สร้าง collection ชื่อ demo204 ซึ่งมีฟิลด์ details เป็นอาร์เรย์ของออบเจกต์ที่มีโครงสร้างไม่เหมือนกัน (บางรายการมีฟิลด์ครบ บางรายการไม่ครบ)

> db.demo204.insertOne({
    "_id": 101,
    "Name": "Chris",
    "Age": 23,
    "details": [
        { "id": "1001", "empId": "John_1001", "salary": "50000", "Technology": "Java" },
        { "id": "1002", "empId": "John_1002" },
        { "id": "1003", "empId": "John_10003", "salary": "60000", "Technology": "MongoDB" }
    ]
});
{ "acknowledged": true, "insertedId": 101 }

ขั้นตอนที่ 2: แสดงข้อมูลทั้งหมด

> db.demo204.find();

ผลลัพธ์:

{ "_id": 101, "Name": "Chris", "Age": 23, "details": [
    { "id": "1001", "empId": "John_1001", "salary": "50000", "Technology": "Java" },
    { "id": "1002", "empId": "John_1002" },
    { "id": "1003", "empId": "John_10003", "salary": "60000", "Technology": "MongoDB" }
] }

ขั้นตอนที่ 3: Aggregation Pipeline เพื่อดึงเฉพาะองค์ประกอบที่ต้องการ

1. $match กรองเอกสารที่มี details.id เท่ากับ "1001"
2. $unwind แยกอาร์เรย์ details เป็นเอกสารแยกต่างหาก
3. $match อีกครั้งเพื่อกรองเฉพาะ details.id = "1001"
4. $project เลือกเฉพาะฟิลด์ Technology และซ่อน _id

> db.demo204.aggregate([
    { "$match": { "details.id": "1001" }},
    { "$unwind": "$details" },
    { "$match": { "details.id": "1001" }},
    { "$project": { "Technology": "$details.Technology", "_id": 0 }}
])

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

{ "Technology": "Java" }

สรุป: เทคนิคนี้เหมาะสำหรับการดึงข้อมูลเฉพาะส่วนจากอาร์เรย์ซ้อน โดยไม่ต้องดึงเอกสารทั้งหมดมาแล้วค่อยกรองฝั่งแอปพลิเคชัน