Sử dụng $in
có thể khá hiệu quả với các mảng nhỏ nhưng không tốt với các danh sách lớn vì nó sẽ bỏ qua trong chỉ mục để tìm các tài liệu phù hợp hoặc xem qua toàn bộ bộ sưu tập nếu không có chỉ mục để sử dụng.
Bên cạnh việc sử dụng $ in với biểu thức chính quy, bạn có thể sử dụng mẫu regex được phân tách bằng dấu sổ đứng với danh sách từ khóa như sau:
Tài liệu kiểm tra:
db.papertest.insert([
{ category: "ad bd cd" },
{ category: "dd ed fd" },
{ category: "gd hd id" },
{ category: "jd kd ld" },
{ category: "md nd od" },
{ category: "pd qd rd" },
{ category: "sd td ud" },
{ category: "vd wd xd yd zd" },
]);
Điều kỳ diệu:
var keywords = ["xd", "sd", "ad"],
regex = keywords.join("|");
db.papertest.find({
"category": {
"$regex": regex,
"$options": "i"
}
});
Kết quả
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }