MongoDB: Можно ли сделать запрос без учета регистра? - PullRequest
265 голосов
/ 08 декабря 2009

Пример:

> db.stuff.save({"foo":"bar"});

> db.stuff.find({"foo":"bar"}).count();
1
> db.stuff.find({"foo":"BAR"}).count();
0

Ответы [ 23 ]

0 голосов
/ 12 мая 2017

Они были проверены на поиск строк

{'_id': /.*CM.*/}               ||find _id where _id contains   ->CM
{'_id': /^CM/}                  ||find _id where _id starts     ->CM
{'_id': /CM$/}                  ||find _id where _id ends       ->CM

{'_id': /.*UcM075237.*/i}       ||find _id where _id contains   ->UcM075237, ignore upper/lower case
{'_id': /^UcM075237/i}          ||find _id where _id starts     ->UcM075237, ignore upper/lower case
{'_id': /UcM075237$/i}          ||find _id where _id ends       ->UcM075237, ignore upper/lower case
0 голосов
/ 10 мая 2017

Как вы можете видеть в документах mongo - начиная с версии 3.2 $text индекс по умолчанию не учитывает регистр: https://docs.mongodb.com/manual/core/index-text/#text-index-case-insensitivity

Создайте текстовый индекс и используйте оператор $ text в своем запросе .

0 голосов
/ 06 сентября 2015

Я создал простой Func для регистра без учета регистра, который я использую в своем фильтре.

private Func<string, BsonRegularExpression> CaseInsensitiveCompare = (field) => 
            BsonRegularExpression.Create(new Regex(field, RegexOptions.IgnoreCase));

Затем вы просто фильтруете поле следующим образом.

db.stuff.find({"foo": CaseInsensitiveCompare("bar")}).count();
...