Verwenden von $in
kann mit kleinen Arrays ziemlich effizient sein, aber nicht so gut mit riesigen Listen, da es im Index herumspringt, um die passenden Dokumente zu finden, oder die ganze Sammlung durchgeht, wenn es keinen zu verwendenden Index gibt.
Neben der Verwendung von $in mit dem regulären Ausdruck könnten Sie ein durch senkrechte Striche getrenntes Regex-Muster mit der Schlüsselwortliste wie folgt verwenden:
Testdokumente:
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" },
]);
Die Magie:
var keywords = ["xd", "sd", "ad"],
regex = keywords.join("|");
db.papertest.find({
"category": {
"$regex": regex,
"$options": "i"
}
});
Die Ergebnisse
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }