Prvky v poli musíte zabalit pomocí RegExp
objekt, tj.
regex = [new RegExp("sai", "i"), new RegExp("test", "i"),...]
Můžete použít map()
metoda k mapování prvků v poli s obaly RegExp na nové pole, které pak můžete použít v dotazu na regulární výraz pomocí $in
:
var x = ["sai","test","jacob","justin"],
regex = x.map(function (e) { return new RegExp(e, "i"); });
db.users.find({"profile.firstName": { "$in": regex } });
Pomocí $in
může být poměrně efektivní s malými poli, ale ne tak dobře s velkými seznamy, protože bude přeskakovat v indexu, aby našel odpovídající dokumenty, nebo projde celou kolekci, pokud neexistuje index, který by se dal použít.
Kromě pomocí $in s regulárním výrazem , můžete použít vzor regulárního výrazu odděleného svislou čarou se seznamem klíčových slov takto:
var x = ["sai","test","jacob","justin"],
regex = x.join("|");
db.users.find({
"profile.firstName": {
"$regex": regex,
"$options": "i"
}
}).count;