Để truy vấn mảng lồng nhau với nhiều điều kiện, sử dụng $elemMatch. Tạo collection:
> db.demo203.insertOne({
"_id" : "101",
"Name" : "Chris",
"details1" : [
{
"empName" : "David",
"salary" : "50000",
"technology" : ["MySQL", "MongoDB"]
},
{
"empName" : "Carol",
"salary" : "70000",
"technology" : ["Java", "Spring"]
}
]
});
{ "acknowledged" : true, "insertedId" : "101" }
Hiển thị tất cả tài liệu:
> db.demo203.find();
Kết quả:
Truy vấn với $elemMatch để tìm phần tử thỏa mãn CẢ HAI điều kiện: technology="MySQL" VÀ empName="David":
> db.demo203.find( {details1: { $elemMatch: {"technology" : "MySQL", "empName": "David"}}} ).pretty()Kết quả - trả về toàn bộ tài liệu gốc vì có phần tử khớp:
Điểm quan trọng:
$elemMatchđảm bảo cùng một phần tử trong mảng thỏa mãn tất cả điều kiện. Không dùng $elemMatch sẽ khớp nếu các điều kiện nằm ở phần tử khác nhau.