A solução de Chris Fulstow funcionará (+1), porém, pode não ser eficiente, principalmente se sua coleção for muito grande. Expressões regulares não enraizadas (aquelas que não começam com
^
, que ancora a expressão regular no início da string) e aqueles que usam o i
sinalizador para distinção entre maiúsculas e minúsculas não usará índices, mesmo se eles existirem. Uma opção alternativa que você pode considerar é desnormalizar seus dados para armazenar uma versão em minúscula do
name
campo, por exemplo, como name_lower
. Você pode consultar isso com eficiência (especialmente se estiver indexado) para correspondências exatas que não diferenciam maiúsculas de minúsculas, como:db.collection.find({"name_lower": thename.toLowerCase()})
Ou com uma correspondência de prefixo (uma expressão regular enraizada) como:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Ambas as consultas usarão um índice em
name_lower
.