Sử dụng $elemMatch kết hợp $gt và $lt để tìm document có phần tử mảng thỏa mãn nhiều điều kiện cùng lúc.
Cú pháp
db.tênCollection.find({trườngMảng: {$elemMatch: {$gt: giáTrịNhỏ, $lt: giáTrịLớn}}})
Ví dụ minh họa
Tạo collection findValueInArrayWithMultipleCriteriaDemo:
> db.findValueInArrayWithMultipleCriteriaDemo.insertOne({"TenSinhVien": "Larry", "DiemSo": [-150, 150]});
> db.findValueInArrayWithMultipleCriteriaDemo.insertOne({"TenSinhVien": "Mike", "DiemSo": [19]});
Tìm document có ít nhất một điểm > -20 VÀ < 20:
> db.findValueInArrayWithMultipleCriteriaDemo.find({DiemSo: {$elemMatch: {$gt: -20, $lt: 20}}}).pretty();
Kết quả:
{ "_id": ObjectId("..."), "TenSinhVien": "Mike", "DiemSo": [19] }
Giải thích: Document của Larry có [-150, 150] - không có phần tử nào thỏa mãn cả hai điều kiện cùng lúc. Document của Mike có [19] - thỏa mãn (-20 < 19 < 20).
Lưu ý: Nếu dùng {DiemSo: {$gt: -20, $lt: 20}} (không có $elemMatch), MongoDB sẽ match nếu CÓ MỘT phần tử > -20 VÀ CÓ MỘT phần tử (có thể khác) < 20.