Je recommanderais de stocker une version normalisée de vos données et d'indexer/rechercher dessus. Ce sera probablement beaucoup plus rapide que d'utiliser regex. Bien sûr, vous consommerez un peu plus d'espace de stockage en incluant "john" à côté de "John", mais votre accès aux données sera plus rapide puisque vous ne pourrez utiliser qu'une requête $eq standard.
Si vous insistez sur regex, je vous recommande d'utiliser ^
(début de ligne) et $
(fin de ligne) autour de votre terme de recherche. N'oubliez pas cependant que vous devez échapper votre valeur de recherche afin que son contenu ne soit pas traité comme RegEx.
Cela devrait fonctionner :
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Ou si vous utilisez une version plus récente du framework, vous pouvez utiliser l'interpolation de chaîne :
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");