Kể từ mongodb 3.2 , chỉ mục văn bản không phân biệt dấu phụ:
Với phiên bản 3, chỉ mục văn bản không phân biệt dấu phụ. Nghĩa là, chỉ mục không phân biệt giữa các ký tự có chứa dấu phụ và phần đối của chúng không được đánh dấu, chẳng hạn như é, ê và e. Cụ thể hơn, chỉ mục văn bản tách các ký tự được phân loại theo thứ tự trong Danh sách đề xuất cơ sở dữ liệu ký tự Unicode 8.0.
Vì vậy, truy vấn sau sẽ hoạt động:
db.Collection.find( { $text: { $search: "iphone"} } );
db.Collection.find( { name: { $regex: "iphone"} } );
nhưng có vẻ như có lỗi với dấu chấm lửng (¨), ngay cả khi nó được phân loại là dấu phụ trong danh sách unicode 8.0 (sự cố trên JIRA:SERVER-29918)
Giải pháp
kể từ mongodb 3.4 bạn có thể sử dụng đối chiếu cho phép bạn thực hiện loại truy vấn này:
ví dụ:để có được kết quả mong đợi của bạn, hãy chạy truy vấn sau:
db.Collection.find({name: "iphone"}).collation({locale: "en", strength: 1})
điều này sẽ xuất ra:
{ "_id" : 1, "name" : "iphone" }
{ "_id" : 2, "name" : "iphône" }
{ "_id" : 3, "name" : "iphonë" }
{ "_id" : 4, "name" : "iphônë" }
trong đối chiếu, strength
là mức độ so sánh để thực hiện
- 1 :chỉ ký tự cơ sở
- 2 :nhạy dấu phụ
- 3 :phân biệt chữ hoa chữ thường + phân biệt dấu phụ