Doporučil bych uložit normalizovanou verzi vašich dat a podle toho indexovat/vyhledávat. Pravděpodobně to bude mnohem rychlejší než použití regulárního výrazu. Jistě, spotřebujete o něco více úložného prostoru, když zařadíte „john“ vedle „John“, ale váš přístup k datům bude rychlejší, protože byste mohli použít pouze standardní $eq dotaz.
Pokud trváte na regulárním výrazu, doporučuji použít ^
(začátek řádku) a $
(konec řádku) kolem hledaného výrazu. Pamatujte však, že byste měli uniknout své hodnotě hledání, aby její obsah nebyl považován za RegEx.
Mělo by to fungovat:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Nebo pokud používáte novější verzi frameworku, můžete použít řetězcovou interpolaci:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");