Chris Fulstows løsning vil virke (+1), men den er muligvis ikke effektiv, især hvis din samling er meget stor. Ikke-rodfæstede regulære udtryk (dem der ikke begynder med ^
, som forankrer det regulære udtryk til starten af strengen), og dem der bruger i
flag for store og små bogstaver vil ikke bruge indekser, selvom de findes.
En alternativ mulighed, du kunne overveje, er at denormalisere dine data for at gemme en version med små bogstaver af name
felt, for eksempel som name_lower
. Du kan derefter forespørge på det effektivt (især hvis det er indekseret) for eksakte match, der ikke er følsomme over for store og små bogstaver, f.eks.:
db.collection.find({"name_lower": thename.toLowerCase()})
Eller med et præfiksmatch (et rodfæstet regulært udtryk) som:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Begge disse forespørgsler vil bruge et indeks på name_lower
.