MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Come faccio a fare query senza distinzione tra maiuscole e minuscole su Mongodb?

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 .