Sử dụng dấu chấm (dot notation) để truy cập sâu vào mảng lồng nhau. Cú pháp:
db.yourCollectionName.find({"yourOuterField.yourInnerField.yourNextInnerField...": "yourValue"}).pretty();
Tạo collection với mảng lồng nhau
> db.nestedJSONArrayDemo.insertOne({
"ClientDetails": {
"ClientPersonalDetails": [
{ "CountryName": "US" },
{ "CountryName": "AUS" },
{ "ClientName": "Chris" },
{ "ClientName": "David" }
]
}
});
{ "acknowledged": true, "insertedId": ObjectId("5cd2cbb2b64f4b851c3a13bc") }
> db.nestedJSONArrayDemo.insertOne({
"ClientDetails": {
"ClientPersonalDetails": [
{ "CountryName": "Belgium" },
{ "CountryName": "Canada" },
{ "CountryName": "Egypt" }
]
}
});
{ "acknowledged": true, "insertedId": ObjectId("5cd2cc14b64f4b851c3a13bd") }
Hiển thị tất cả
> db.nestedJSONArrayDemo.find().pretty();
Truy vấn tìm tài liệu có CountryName = "Canada" trong mảng lồng nhau
> db.nestedJSONArrayDemo.find({"ClientDetails.ClientPersonalDetails.CountryName": "Canada"}).pretty();
Kết quả:
{
"_id": ObjectId("5cd2cc14b64f4b851c3a13bd"),
"ClientDetails": {
"ClientPersonalDetails": [
{ "CountryName": "Belgium" },
{ "CountryName": "Canada" },
{ "CountryName": "Egypt" }
]
}
}
Giải thích: MongoDB tự động "unwind" mảng khi truy vấn bằng dot notation — nó kiểm tra từng phần tử trong mảng ClientPersonalDetails xem có trường CountryName = "Canada" không.