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

ดึงเฉพาะ Element ที่ Query ใน Array ของ Object MongoDB ($elemMatch)

ใช้ 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