MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Tìm kiếm trong MongoDB diacriticInSensitive không hiển thị tất cả các hàng có dấu (từ có dấu phụ) như mong đợi và ngược lại

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ụ



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nâng cấp trong Mongo DB bằng trình điều khiển C # chính thức

  2. Tại sao mongoose sử dụng lược đồ khi lợi ích của mongodb được cho là nó không có lược đồ?

  3. Trả về kiểu thực tế của một trường trong MongoDB

  4. C # + MongoDB - ObjectId mà không sử dụng MongoDB DataTypes / Attributes

  5. Làm thế nào để sử dụng dữ liệu được kết xuất bởi mongodump?