Бих препоръчал да съхранявате нормализирана версия на вашите данни и да индексирате/търсите по тях. Вероятно ще бъде значително по-бързо от използването на регулярен израз. Разбира се, ще изядете малко повече място за съхранение, като включите „john“ заедно с „John“, но достъпът ви до данни ще бъде по-бърз, тъй като просто ще можете да използвате стандартна $eq заявка.
Ако настоявате за regex, препоръчвам да използвате ^
(начало на ред) и $
(края на реда) около вашата дума за търсене. Не забравяйте обаче, че трябва да избягвате стойността си за намиране, така че нейното съдържание да не се третира като RegEx.
Това трябва да работи:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Или ако използвате по-нова версия на рамката, можете да използвате интерполация на низ:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");