ใช้ Projection Operator $elemMatch เพื่อดึงเฉพาะ Element ใน Array ที่ตรงเงื่อนไข
สร้างข้อมูลตัวอย่าง (Array of Objects)
> db.objectArray.insert({"Persons":[{"PersonName":"Adam","PersonSalary":25000},{"PersonName":"Larry","PersonSalary":27000}]});
WriteResult({ "nInserted" : 1 })
> db.objectArray.insert({"Persons":[{"PersonName":"David","PersonSalary":32000},{"PersonName":"Carol","PersonSalary":77000}]});
WriteResult({ "nInserted" : 1 })
แสดงเอกสารทั้งหมด
> db.objectArray.find().pretty();
Query: ดึงเฉพาะ Element ที่ PersonSalary = 25000 (ไม่รวม _id)
> db.objectArray.find(
{"Persons.PersonSalary": 25000},
{_id: 0, Persons: {$elemMatch: {"PersonSalary": 25000}}}
).pretty();
ผลลัพธ์
{ "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 } ] }
วิธีทางเลือก: ใช้ Projection Operator $ (Positional)
> db.objectArray.find(
{"Persons.PersonSalary": 25000},
{_id: 0, "Persons.$": 1}
).pretty();
ผลลัพธ์เหมือนกัน
{ "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 } ] }
ความแตกต่าง: $elemMatch รองรับเงื่อนไขซับซ้อนได้หลายเงื่อนไข ส่วน $ ใช้ได้เฉพาะเงื่อนไขเดียวที่ Match ใน Query