MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

impossible d'utiliser regex dans l'opérateur $in dans mongodb

Vous devez envelopper les éléments dans le tableau avec le RegExp objet c'est-à-dire

regex = [new RegExp("sai", "i"), new RegExp("test", "i"),...]

Vous pouvez utiliser le map() méthode pour mapper les éléments du tableau avec les wrappers RegExp vers un nouveau tableau que vous pouvez ensuite utiliser dans la requête regex avec $in :

var x = ["sai","test","jacob","justin"],
    regex = x.map(function (e) { return new RegExp(e, "i"); });

db.users.find({"profile.firstName": { "$in": regex } });

Utilisation de $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 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 :

var x = ["sai","test","jacob","justin"],
    regex = x.join("|");

db.users.find({
    "profile.firstName": {
        "$regex": regex, 
        "$options": "i"
    } 
}).count;