Giới thiệu
Để tìm tài liệu có mảng khớp chính xác một tập giá trị bất kể thứ tự, bạn kết hợp toán tử $all (chứa tất cả các giá trị) với $size (kiểm tra độ dài mảng).
Ví dụ minh họa
1. Tạo collection
> db.khopChinhXacMang.insertOne({"TenSinhVien":"David","TuoiSinhVien":22,"DiemGame":[45,78,98]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c94702d6669774125246c") }
> db.khopChinhXacMang.insertOne({"TenSinhVien":"Chris","TuoiSinhVien":23,"DiemGame":[45,78]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c94a42d6669774125246d") }
2. Tìm mảng có đúng 2 phần tử [78, 45] (thứ tự không quan trọng)
> db.khopChinhXacMang.find({ "DiemGame": { "$size" : 2, "$all": [ 78, 45 ] } }).pretty();
Kết quả - chỉ trả về tài liệu của Chris:
{ "_id" : ObjectId("5c9c94a42d6669774125246d"), "TenSinhVien" : "Chris", "TuoiSinhVien" : 23, "DiemGame" : [ 45, 78 ] }
3. Tìm mảng có 3 phần tử và chứa cả 78 và 45
> db.khopChinhXacMang.find({ "DiemGame": { "$size" : 3, "$all": [ 78, 45 ] } }).pretty();
Kết quả - trả về tài liệu của David (mảng có 3 phần tử: 45, 78, 98):
{ "_id" : ObjectId("5c9c94702d6669774125246c"), "TenSinhVien" : "David", "TuoiSinhVien" : 22, "DiemGame" : [ 45, 78, 98 ] }
Tóm tắt quy tắc
| Toán tử | Chức năng |
|---|---|
$all | Mảng phải chứa TẤT CẢ các giá trị chỉ định |
$size | Mảng phải có ĐÚNG số lượng phần tử chỉ định |
| Kết hợp cả hai | Khớp chính xác tập giá trị, bất kể thứ tự |
Lưu ý
$sizekhông thể kết hợp với các toán tử truy vấn khác trên cùng một trường (trừ $all)- Để tìm mảng chứa ít nhất các giá trị cho trước (có thể có thêm), chỉ dùng
$allmà không cần$size