La soluzione di Chris Fulstow funzionerà (+1), tuttavia potrebbe non essere efficiente, soprattutto se la tua collezione è molto grande. Espressioni regolari senza root (quelle che non iniziano con ^
, che ancora l'espressione regolare all'inizio della stringa) e quelli che usano i
flag per la distinzione tra maiuscole e minuscole non utilizzerà gli indici, anche se esistono.
Un'opzione alternativa che potresti prendere in considerazione è denormalizzare i tuoi dati per memorizzare una versione minuscola del name
campo, ad esempio come name_lower
. Puoi quindi eseguire query in modo efficiente (soprattutto se è indicizzato) per corrispondenze esatte senza distinzione tra maiuscole e minuscole come:
db.collection.find({"name_lower": thename.toLowerCase()})
O con una corrispondenza del prefisso (un'espressione regolare radicata) come:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Entrambe queste query utilizzeranno un indice su name_lower
.