Tôi khuyên bạn nên lưu trữ phiên bản chuẩn hóa dữ liệu của mình và lập chỉ mục / tìm kiếm trên đó. Nó có thể sẽ nhanh hơn đáng kể so với sử dụng regex. Chắc chắn, bạn sẽ ngốn thêm một chút dung lượng bộ nhớ bằng cách bao gồm "john" cùng với "John", nhưng quyền truy cập dữ liệu của bạn sẽ nhanh hơn vì bạn chỉ có thể sử dụng truy vấn $ eq tiêu chuẩn.
Nếu bạn nhấn mạnh vào regex, tôi khuyên bạn nên sử dụng ^
(đầu dòng) và $
(cuối dòng) xung quanh cụm từ tìm kiếm của bạn. Tuy nhiên, hãy nhớ rằng bạn nên thoát khỏi giá trị tìm thấy của mình để nội dung của nó không được coi là RegEx.
Điều này sẽ hoạt động:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression(string.Format("^{0}$", escapedFindValue), "i");
Hoặc nếu bạn đang sử dụng phiên bản khung mới hơn, bạn có thể sử dụng nội suy chuỗi:
string escapedFindValue = System.Text.RegularExpressions.Regex.Escape(findValue);
new BsonRegularExpression($"^{escapedFindValue}$", "i");