Sử dụng dot notation (ký pháp dấu chấm) để truy vấn và chiếu (project) các trường bên trong mảng đối tượng.
Tạo collection:
> db.demo38.insertOne({"ClientDetails":[{"ClientId":101,"ClientName":"Chris"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176abccfb11e5c34d898d9") }
> db.demo38.insertOne({"ClientDetails":[{"ClientId":102,"ClientName":"David"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176ac7cfb11e5c34d898da") }
> db.demo38.insertOne({"ClientDetails":[{"ClientId":103,"ClientName":"Mike"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e176ad0cfb11e5c34d898db") }
Xem dữ liệu:
> db.demo38.find();
{ "_id" : ObjectId("5e176abccfb11e5c34d898d9"), "ClientDetails" : [ { "ClientId" : 101, "ClientName" : "Chris" } ] }
{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }
{ "_id" : ObjectId("5e176ad0cfb11e5c34d898db"), "ClientDetails" : [ { "ClientId" : 103, "ClientName" : "Mike" } ] }
Truy vấn tìm tài liệu có ClientName="David" trong mảng:
> db.demo38.find({"ClientDetails.ClientName":"David"});
Kết quả:
{ "_id" : ObjectId("5e176ac7cfb11e5c34d898da"), "ClientDetails" : [ { "ClientId" : 102, "ClientName" : "David" } ] }
Mở rộng - Chỉ lấy trường cụ thể trong mảng (projection):
db.demo38.find({"ClientDetails.ClientName":"David"}, {"ClientDetails.$.ClientName": 1, _id: 0})
Kết quả: { "ClientDetails" : [ { "ClientName" : "David" } ] }
Toán tử $ trong projection trả về phần tử đầu tiên khớp với điều kiện query.