MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Como faço consultas que não diferenciam maiúsculas de minúsculas no Mongodb?


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 .