Bạn có thể sử dụng toán tử chiếu $ elemMatch để lọc phần tử được truy vấn trong một mảng đối tượng trong bộ sưu tập MongoDB. Để chỉ truy xuất phần tử được truy vấn trong một mảng đối tượng trong MongoDB, trước tiên chúng ta hãy tạo một bộ sưu tập với mảng đối tượng tài liệu.
Truy vấn như sau:
> 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 })
Bây giờ bạn có thể hiển thị tất cả các tài liệu với sự trợ giúp của find (). Truy vấn như sau:
> db.objectArray.find().pretty();
Sau đây là kết quả:
{ "_id" : ObjectId("5c6bfadc68174aae23f5ef53"), "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 }, { "PersonName" : "Larry", "PersonSalary" : 27000 } ] } { "_id" : ObjectId("5c6bfb0968174aae23f5ef54"), "Persons" : [ { "PersonName" : "David", "PersonSalary" : 32000 }, { "PersonName" : "Carol", "PersonSalary" : 77000 } ] }
Đây là truy vấn để chỉ lấy phần tử được truy vấn trong một mảng đối tượng trong MongoDB. Đây Trong _id:0 được thêm vào để loại trừ thuộc tính id (không hiển thị thuộc tính _id):
> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0,Persons:{$elemMatch:{"PersonSalary":25000}}}).pretty();
Sau đây là kết quả:
{ "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 } ] }
Cách thay thế để thực hiện tác vụ trên là với sự trợ giúp của toán tử chiếu $. Truy vấn như sau:
> db.objectArray.find({"Persons.PersonSalary":25000}, { _id:0,'Persons.$':1}).pretty();
Sau đây là kết quả:
{ "Persons" : [ { "PersonName" : "Adam", "PersonSalary" : 25000 } ] }