Ich würde empfehlen, eine normalisierte Version Ihrer Daten zu speichern und danach zu indizieren/suchen. Es wird wahrscheinlich erheblich schneller sein als die Verwendung von Regex. Sicher, Sie verbrauchen etwas mehr Speicherplatz, wenn Sie "john" neben "John" einfügen, aber Ihr Datenzugriff wird schneller, da Sie nur eine Standard-$eq-Abfrage verwenden könnten.
Wenn Sie auf Regex bestehen, empfehle ich die Verwendung von ^
(Zeilenanfang) und $
(Zeilenende) um Ihren Suchbegriff. Denken Sie jedoch daran, dass Sie Ihren find-Wert maskieren sollten, damit sein Inhalt nicht als RegEx behandelt wird.
Das sollte funktionieren:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Oder wenn Sie eine neuere Framework-Version verwenden, können Sie die String-Interpolation verwenden:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");