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

Tìm tài liệu có mảng khớp chính xác với mảng truy vấn trong MongoDB

Để tìm tài liệu mà trường mảng chứa chính xác tất cả các phần tử được chỉ định (không quan tâm thứ tự, nhưng phải có đủ), MongoDB cung cấp toán tử $all.

Tạo dữ liệu mẫu

> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["C++","Java","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69a5f57806ebf1256f12e") }
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["MySQL","Java","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69ac057806ebf1256f12f") }
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["C#","Python","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69ad457806ebf1256f130") }
> db.findDocumentExactlySameInArrayDemo.insertOne({"TechnicalSubjects":["MySQL","C","MongoDB"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd69adf57806ebf1256f131") }

Xem dữ liệu

> db.findDocumentExactlySameInArrayDemo.find().pretty();

Tìm mảng chứa ĐẦY ĐỦ: "MySQL", "Java", "MongoDB"

> db.findDocumentExactlySameInArrayDemo.find({"TechnicalSubjects": { "$all": ["MySQL","Java","MongoDB"] }});

Kết quả


Giải thích

  • $all: Yêu cầu mảng chứa tất cả các giá trị trong mảng điều kiện
  • Thứ tự không quan trọng: ["Java", "MySQL", "MongoDB"] cũng khớp
  • Mảng tài liệu có thể chứa thêm phần tử khác (ví dụ: ["MySQL","Java","MongoDB","Extra"] vẫn khớp)
  • Chỉ tài liệu thứ 2 khớp vì có đủ 3 phần tử yêu cầu

So sánh các toán tử mảng

Toán tửÝ nghĩaVí dụ khớp
$inChứa ít nhất một giá trị{$in: ["A","B"]} khớp ["A"], ["B"], ["A","B"]
$allChứa tất cả giá trị{$all: ["A","B"]} chỉ khớp ["A","B"], ["B","A","C"]
$elemMatchKhớp một phần tử thỏa mãn nhiều điều kiệnDành cho mảng đối tượng
Khớp chính xác mảngMảng y hệt (cùng phần tử, cùng thứ tự, cùng độ dài){arr: ["A","B"]}

Khớp chính xác tuyệt đối (cùng thứ tự, cùng độ dài)

// Chỉ khớp ["MySQL","Java","MongoDB"] đúng thứ tự
db.findDocumentExactlySameInArrayDemo.find({TechnicalSubjects: ["MySQL","Java","MongoDB"]});

Ứng dụng thực tế

  • Tìm user có đủ các quyền/role yêu cầu
  • Lọc sản phẩm có đủ các tag/tính năng bắt buộc
  • Kiểm tra tập hợp kỹ năng của ứng viên