Gebruik $in
kan redelijk efficiënt zijn met kleine arrays, maar niet zo goed met enorme lijsten, omdat het de index zal overslaan om de overeenkomende documenten te vinden, of door de hele collectie loopt als er geen index is om te gebruiken.
Naast het gebruik van $in met de reguliere expressie, zou je een door pijpen gescheiden regex-patroon kunnen gebruiken met de lijst met zoekwoorden als volgt:
Testdocumenten:
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" },
]);
De magie:
var keywords = ["xd", "sd", "ad"],
regex = keywords.join("|");
db.papertest.find({
"category": {
"$regex": regex,
"$options": "i"
}
});
De resultaten
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }