Для MongoDB 3.4+ рекомендуется использовать индексы.
Смотри https://jira.mongodb.org/browse/DOCS-11105?focusedCommentId=1859745&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-1859745
Я успешно ищу без учета регистра:
1. Создание индекса с сопоставлением для языкового стандарта (например, «en») с силой 1 или 2. См. https://docs.mongodb.com/manual/core/index-case-insensitive/ для получения дополнительной информации
- Использование того же сопоставления при выполнении поиска в коллекции MongoDb.
Как пример:
Создание сопоставления с силой 1 или 2 для нечувствительного к регистру
private readonly Collation _caseInsensitiveCollation = new Collation("en", strength: CollationStrength.Primary);
Создать индекс. В моем случае я индексирую несколько полей:
private void CreateIndex()
{
var indexOptions = new CreateIndexOptions {Collation = _caseInsensitiveCollation};
var indexDefinition
= Builders<MyDto>.IndexKeys.Combine(
Builders<MyDto>.IndexKeys.Ascending(x => x.Foo),
Builders<MyDto>.IndexKeys.Ascending(x => x.Bar));
_myCollection.Indexes.CreateOne(indexDefinition, indexOptions);
}
При запросе убедитесь, что вы используете тот же порядок сортировки:
public IEnumerable<MyDto> GetItems()
{
var anyFilter = GetQueryFilter();
var anySort = sortBuilder.Descending(x => x.StartsOn);
var findOptions = new FindOptions {Collation = _caseInsensitiveCollation};
var result = _salesFeeRules
.Find(anyFilter, findOptions)
.Sort(anySort)
.ToList();
return result;
}