Utiliser $in
peut être assez efficace avec de petits tableaux mais pas aussi bien avec des listes énormes car il sautera dans l'index pour trouver les documents correspondants, ou parcourra toute la collection s'il n'y a pas d'index à utiliser.
Outre l'utilisation de $in avec l'expression régulière, vous pouvez utiliser un modèle de regex délimité par des barres verticales avec la liste de mots-clés comme ceci :
Documents d'essai :
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" },
]);
La magie :
var keywords = ["xd", "sd", "ad"],
regex = keywords.join("|");
db.papertest.find({
"category": {
"$regex": regex,
"$options": "i"
}
});
Les résultats
{ "_id" : ObjectId("56bb6f171bb4f693057c0ba4"), "category" : "ad bd cd" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0baa"), "category" : "sd td ud" }
{ "_id" : ObjectId("56bb6f171bb4f693057c0bab"), "category" : "vd wd xd yd zd" }