La solución de Chris Fulstow funcionará (+1), sin embargo, puede que no sea eficiente, especialmente si su colección es muy grande. Expresiones regulares no rooteadas (aquellas que no comienzan con ^
, que ancla la expresión regular al comienzo de la cadena), y aquellos que usan i
la marca de insensibilidad a mayúsculas y minúsculas no usará índices, incluso si existen.
Una opción alternativa que podría considerar es desnormalizar sus datos para almacenar una versión en minúsculas del name
campo, por ejemplo como name_lower
. Luego puede consultar eso de manera eficiente (especialmente si está indexado) para coincidencias exactas que no distinguen entre mayúsculas y minúsculas como:
db.collection.find({"name_lower": thename.toLowerCase()})
O con una coincidencia de prefijo (una expresión regular arraigada) como:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Ambas consultas usarán un índice en name_lower
.