Rozwiązanie Chrisa Fulstowa zadziała (+1), jednak może nie być wydajne, zwłaszcza jeśli twoja kolekcja jest bardzo duża. Nierootowane wyrażenia regularne (nie zaczynające się od ^
, który zakotwicza wyrażenie regularne na początku ciągu) oraz te używające i
flaga niewrażliwości na wielkość liter nie będzie używać indeksów, nawet jeśli istnieją.
Alternatywną opcją, którą możesz rozważyć, jest denormalizacja danych w celu przechowywania wersji name
pisanej małymi literami pole, na przykład jako name_lower
. Następnie możesz skutecznie wykonać zapytanie (zwłaszcza jeśli jest indeksowane) dla dokładnych dopasowań bez rozróżniania wielkości liter, takich jak:
db.collection.find({"name_lower": thename.toLowerCase()})
Lub z dopasowaniem przedrostka (zrootowanym wyrażeniem regularnym) jako:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
Oba te zapytania będą używać indeksu na name_lower
.