データの正規化されたバージョンを保存し、それに基づいてインデックスを作成/検索することをお勧めします。正規表現を使用するよりもかなり高速になる可能性があります。もちろん、「John」の横に「john」を含めると、ストレージスペースが少し消費されますが、標準の$ eqクエリを使用できるため、データアクセスが高速になります。
正規表現を主張する場合は、^
を使用することをお勧めします (行頭)と$
(行末)検索語の前後。ただし、検索値をエスケープして、その内容が正規表現として扱われないようにする必要があることに注意してください。
これは機能するはずです:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
または、新しいバージョンのフレームワークを使用している場合は、文字列補間を使用できます:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");