Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cách tìm khớp chính xác mảng (array) bất kể thứ tự trong MongoDB

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
$allMảng phải chứa TẤT CẢ các giá trị chỉ định
$sizeMảng phải có ĐÚNG số lượng phần tử chỉ định
Kết hợp cả haiKhớp chính xác tập giá trị, bất kể thứ tự

Lưu ý

  • $size khô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 $all mà không cần $size