Използване на $in
може да бъде доста ефективно с малки масиви, но не толкова добре с огромни списъци, тъй като ще прескача в индекса, за да намери съвпадащите документи, или ще премине през цялата колекция, ако няма индекс за използване.
Освен да използвате $in с регулярния израз, можете да използвате разделен с вертикални черти шаблон на регулярни изрази със списъка с ключови думи като този:
Тестови документи:
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" },
]);
Магията:
var keywords = ["xd", "sd", "ad"],
regex = keywords.join("|");
db.papertest.find({
"category": {
"$regex": regex,
"$options": "i"
}
});
Резултатите
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }