Sử dụng toán tử $elemMatch kết hợp $and để tìm document có mảng chứa 2 giá trị phân biệt thỏa mãn 2 điều kiện khác nhau.
Tạo collection với document:
> db.findDocumentsHaving2Demo.insertOne({ _id: 101, Values: [78, 98] });
{ "acknowledged" : true, "insertedId" : 101 }
> db.findDocumentsHaving2Demo.insertOne({ _id: 102, Values: [89, 102] });
{ "acknowledged" : true, "insertedId" : 102 }
Hiển thị tất cả document:
> db.findDocumentsHaving2Demo.find().pretty();
Kết quả:
{ "_id" : 101, "Values" : [ 78, 98 ] }
{ "_id" : 102, "Values" : [ 89, 102 ] }
Truy vấn tìm document có: (1) một giá trị trong [77,78] VÀ (2) một giá trị trong [90,110] VÀ (3) mảng chỉ có 2 phần tử (không có index 2):
> db.findDocumentsHaving2Demo.find({
$and: [
{ Values: { $elemMatch: { $gte: 77, $lte: 78 } } },
{ Values: { $elemMatch: { $gte: 90, $lte: 110 } } },
{ 'Values.2': { $exists: false } }
]
});
Kết quả (chỉ document _id: 101 thỏa mãn):
{ "_id" : 101, "Values" : [ 78, 98 ] }