sql >> Base de Datos >  >> NoSQL >> MongoDB

no se puede usar regex en el operador $in en mongodb

Debe envolver los elementos en la matriz con RegExp objeto, es decir,

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

Puede usar el map() método para asignar los elementos en la matriz con los envoltorios RegExp a una nueva matriz que luego puede usar en la consulta de expresiones regulares 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 } });

Usando $in puede ser bastante eficiente con arreglos pequeños, pero no tan bien con listas grandes, ya que se saltará el índice para encontrar los documentos coincidentes, o recorrerá toda la colección si no hay un índice para usar.

Además de usando $in con la expresión regular , podría usar un patrón de expresión regular delimitado por barras verticales con la lista de palabras clave como esta:

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

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