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

วิธี Filter Array ใน Subdocument ด้วย MongoDB Aggregation

ใช้ Aggregation Pipeline ร่วม $unwind แล้วค่อย $match เพื่อกรอง Array ใน Subdocument

สร้างข้อมูลตัวอย่าง


> db.filterArray.insertOne({
    "L": [
        {"N": 1}, {"N": 2}, {"N": 3}, {"N": 4}, {"N": 5}
    ]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6d63f2734e98fc0a434aeb") }

แสดงเอกสาร


> db.filterArray.find().pretty();

{
    "_id" : ObjectId("5c6d63f2734e98fc0a434aeb"),
    "L" : [ {"N":1}, {"N":2}, {"N":3}, {"N":4}, {"N":5} ]
}

Filter ค่า N > 3


> db.filterArray.aggregate([
    { $match: { _id: ObjectId("5c6d63f2734e98fc0a434aeb") }},
    { $unwind: "$L" },
    { $match: { "L.N": { $gt: 3 }}},
    { $group: { _id: "$_id", subDocument: { $push: "$L.N" }}}
]).pretty();

ผลลัพธ์


{
    "_id" : ObjectId("5c6d63f2734e98fc0a434aeb"),
    "subDocument" : [ 4, 5 ]
}

Pipeline: $match เลือกเอกสาร → $unwind แยก Array → $match กรองค่า > 3 → $group รวมกลับเป็น Array ใหม่