È 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;