Решението на Крис Фулстоу ще работи (+1), но може да не е ефективно, особено ако колекцията ви е много голяма. Некоренирани регулярни изрази (тези, които не започват с ^
, който закотвя регулярния израз към началото на низа), и тези, използващи i
флагът за нечувствителност към малки и малки букви няма да използва индекси, дори и да съществуват.
Алтернативен вариант, който бихте могли да обмислите, е да денормализирате данните си, за да съхранявате версия с малки букви на name
поле, например като name_lower
. След това можете да заявите това ефективно (особено ако е индексирано) за точни съвпадения без значение на главни и малки букви като:
db.collection.find({"name_lower": thename.toLowerCase()})
Или със съвпадение на префикс (вкоренен регулярен израз) като:
db.collection.find( {"name_lower":
{ $regex: new RegExp("^" + thename.toLowerCase(), "i") } }
);
И двете от тези заявки ще използват индекс на name_lower
.