Để tìm document mà mảng chứa tất cả các phần tử của một tập con (subset) cho trước, bạn sử dụng toán tử $all.
Tạo dữ liệu mẫu
>> db.subsetOfAnArrayDemo.insertOne({"StudentProgrammingSkills": ["Java","MongoDB","MySQL","C++","Data Structure","Algorithm","Python","Oracle","SQL Server"]});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb9d1e1895c4fd159f80804") }
Hiển thị document:
>> db.subsetOfAnArrayDemo.find().pretty();
Truy vấn với $all
Tìm document có mảng
StudentProgrammingSkillschứa cả "MongoDB" và "MySQL":> db.subsetOfAnArrayDemo.find({ StudentProgrammingSkills: { $all: [ 'MongoDB', 'MySQL' ] } } ).pretty();Kết quả:
Đặc điểm của $all:
- Khớp khi mảng chứa tất cả các giá trị chỉ định (logic AND)
- Thứ tự phần tử trong mảng không quan trọng
- Phần tử có thể nằm ở bất kỳ vị trí nào trong mảng
- Khác với
$in(logic OR - khớp nếu chứa ít nhất một giá trị)
Ví dụ so sánh: {tags: {$in: ["A","B"]}} khớp nếu có A HOẶC B; {tags: {$all: ["A","B"]}} khớp chỉ khi có CẢ A VÀ B.