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

การกรองค่าเฉพาะจากเอกสาร MongoDB ด้วย $filter

ใช้ $filter ร่วมกับ $let และ $slice ใน $addFields

สามารถกรองอาร์เรย์ให้เหลือเฉพาะอิลิเมนต์ที่ตรงเงื่อนไข และเลือกอิลิเมนต์สุดท้ายด้วย $slice

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

> db.demo751.insertOne({
    _id: 101,
    details: [
        { Name: "Robert", id:110, Age:21 },
        { Name: "Rae", id:110, Age:22 },
        { Name: "Ralph", id:116, Age:23 }
    ]
});

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

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

ผลลัพธ์:

{ "_id" : 101, "details" : [ { "Name" : "Robert", "id" : 110, "Age" : 21 }, { "Name" : "Rae", "id" : 110, "Age" : 22 }, { "Name" : "Ralph", "id" : 116, "Age" : 23 } ] }

คิวรีกรองเฉพาะ id=110 และเอาเฉพาะรายการสุดท้าย

> db.demo751.aggregate([
    {
        $addFields: {
            details: {
                $let: {
                    vars: {
                        filtered: { $filter: { input: "$details", as: "out", cond: { $eq: [ "$$out.id", 110 ] } } }
                    },
                    in: { $slice: [ "$$filtered", -1 ] }
                }
            }
        }
    }
])

ผลลัพธ์: เหลือเฉพาะรายการ Rae (รายการสุดท้ายของ id 110)

{ "_id" : 101, "details" : [ { "Name" : "Rae", "id" : 110, "Age" : 22 } ] }