MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

impossibile utilizzare regex nell'operatore $in in mongodb

È necessario racchiudere gli elementi nell'array con RegExp oggetto cioè

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

Puoi utilizzare il map() metodo per mappare gli elementi nell'array con i wrapper RegExp su un nuovo array che puoi quindi utilizzare nella query regex con $in :

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

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

Utilizzo di $in può essere abbastanza efficiente con piccoli array ma non così bene con elenchi enormi poiché salterà nell'indice per trovare i documenti corrispondenti o percorrerà l'intera raccolta se non c'è un indice da utilizzare.

Oltre a utilizzando $in con l'espressione regolare , potresti utilizzare un pattern regex delimitato da pipe con l'elenco di parole chiave in questo modo:

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

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