Jag skulle rekommendera att lagra en normaliserad version av dina data och indexera/söka efter det. Det kommer sannolikt att vara betydligt snabbare än att använda regex. Visst, du kommer att äta upp lite mer lagringsutrymme genom att inkludera "john" bredvid "John", men din dataåtkomst blir snabbare eftersom du bara skulle kunna använda en vanlig $eq-fråga.
Om du insisterar på regex rekommenderar jag att du använder ^
(radens början) och $
(slut på raden) runt din sökterm. Kom dock ihåg att du bör undvika ditt fyndvärde så att dess innehåll inte behandlas som RegEx.
Detta borde fungera:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Eller om du använder en nyare ramverksversion kan du använda stränginterpolation:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");