Để tăng tốc tìm kiếm trên collection lớn, hãy tạo index (chỉ mục) phù hợp. Sử dụng createIndex(). Tạo collection với index trên ListOfName:
> db.demo661.createIndex({ListOfName:1});
{ "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 }
> db.demo661.insertOne({_id:1,ListOfName:["John","Robert","David"]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo661.insertOne({_id:2,ListOfName:["Mike","Sam"]});
{ "acknowledged" : true, "insertedId" : 2 }
> db.demo661.insertOne({_id:3,ListOfName:["John","David","Bob"]});
{ "acknowledged" : true, "insertedId" : 3 }
Hiển thị dữ liệu:
> db.demo661.find();
Kết quả:
Tìm tài liệu có ListOfName chứa CẢ "John" VÀ "David" (dùng
$all):> db.demo661.find({"ListOfName": {"$all":["John","David"]}});Kết quả khớp _id 1 và 3:
Giải thích:
createIndex({ListOfName:1})tạo **multikey index** - index mỗi phần tử trong mảng$alldùng index này để tìm tài liệu chứa TẤT CẢ giá trị trong mảng điều kiện- Khác với
$in(chỉ cần 1 giá trị khớp),$allyêu cầu TẤT CẢ giá trị đều có mặt
Khuyến nghị: Luôn chạy explain("executionStats") trước/sau khi tạo index để đo lường hiệu suất. Tránh tạo quá nhiều index không cần thiết (tốn RAM, chậm write).