Zalecam przechowywanie znormalizowanej wersji danych i indeksowanie/wyszukiwanie na ich podstawie. Prawdopodobnie będzie to znacznie szybsze niż użycie wyrażenia regularnego. Jasne, zużyjesz trochę więcej miejsca, dodając „john” obok „John”, ale dostęp do danych będzie szybszy, ponieważ będziesz mógł użyć standardowego zapytania $eq.
Jeśli nalegasz na wyrażenie regularne, polecam użyć ^
(początek linii) i $
(koniec wiersza) wokół wyszukiwanego hasła. Pamiętaj jednak, że powinieneś zmienić wartość find, aby jej zawartość nie była traktowana jako RegEx.
To powinno działać:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Lub jeśli używasz nowszej wersji frameworka, możesz użyć interpolacji ciągów:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");