คุณสามารถใช้ตัวดำเนินการฉายภาพ $elemMatch เพื่อกรององค์ประกอบที่สืบค้นในอาร์เรย์อ็อบเจ็กต์ในคอลเล็กชัน MongoDB ในการดึงเฉพาะองค์ประกอบที่สืบค้นในอาร์เรย์วัตถุใน MongoDB ขั้นแรกให้เราสร้างคอลเลกชันที่มีอาร์เรย์วัตถุของเอกสาร
แบบสอบถามมีดังนี้:
> 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 }) ตอนนี้คุณสามารถแสดงเอกสารทั้งหมดด้วยความช่วยเหลือของ find() แบบสอบถามมีดังนี้:
> db.objectArray.find().pretty();
ต่อไปนี้เป็นผลลัพธ์:
{
"_id" : ObjectId("5c6bfadc68174aae23f5ef53"),
"Persons" : [
{
"PersonName" : "Adam",
"PersonSalary" : 25000
},
{
"PersonName" : "Larry",
"PersonSalary" : 27000
}
]
}
{
"_id" : ObjectId("5c6bfb0968174aae23f5ef54"),
"Persons" : [
{
"PersonName" : "David",
"PersonSalary" : 32000
},
{
"PersonName" : "Carol",
"PersonSalary" : 77000
}
]
} นี่คือแบบสอบถามเพื่อดึงเฉพาะองค์ประกอบที่สืบค้นในอาร์เรย์วัตถุใน MongoDB ที่นี่ใน _id:0 ถูกเพิ่มเพื่อยกเว้นคุณสมบัติ id (ไม่แสดงคุณสมบัติ _id):
> db.objectArray.find({"Persons.PersonSalary":25000}, {
_id:0,Persons:{$elemMatch:{"PersonSalary":25000}}}).pretty(); ต่อไปนี้เป็นผลลัพธ์:
{
"Persons" : [
{
"PersonName" : "Adam",
"PersonSalary" : 25000
}
]
} วิธีอื่นในการทำงานข้างต้นคือการใช้ตัวดำเนินการฉายภาพ $ แบบสอบถามมีดังนี้:
> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0,'Persons.$':1}).pretty(); ต่อไปนี้เป็นผลลัพธ์:
{
"Persons" : [
{
"PersonName" : "Adam",
"PersonSalary" : 25000
}
]
}