Saya akan merekomendasikan menyimpan versi data Anda yang dinormalisasi, dan mengindeks/mencarinya. Kemungkinan akan jauh lebih cepat daripada menggunakan regex. Tentu, Anda akan menghabiskan lebih banyak ruang penyimpanan dengan menyertakan "john" di samping "John", tetapi akses data Anda akan lebih cepat karena Anda hanya dapat menggunakan kueri $eq standar.
Jika Anda bersikeras pada regex, saya sarankan menggunakan ^
(awal baris) dan $
(akhir baris) di sekitar istilah pencarian Anda. Namun ingat, Anda harus keluar dari nilai find agar kontennya tidak diperlakukan sebagai RegEx.
Ini akan berhasil:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Atau jika Anda menggunakan versi kerangka kerja yang lebih baru, Anda dapat menggunakan interpolasi string:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");