Cách tạo chỉ mục không phân biệt chữ hoa chữ thường MongoDB
Trong bài đăng này, chúng tôi sẽ hướng dẫn bạn cách tạo chỉ mục không phân biệt chữ hoa chữ thường trong MongoDB bằng cách sử dụng Collations, một tính năng mới được MongoDB phát hành trong phiên bản 3.4.
Chỉ mục phân biệt chữ hoa chữ thường là gì?
Chỉ mục không phân biệt chữ hoa chữ thường hỗ trợ các truy vấn thực hiện so sánh chuỗi mà không liên quan đến chữ hoa và với sự hỗ trợ Collation của MongoDB 3.4, giờ đây bạn có thể xây dựng các chỉ mục này. Đối chiếu cung cấp cho bạn khả năng chỉ định các quy tắc dành riêng cho ngôn ngữ để so sánh chuỗi. Vì các phiên bản trước của MongoDB không hỗ trợ Đối chiếu, bạn bị giới hạn trong việc thực hiện so sánh chỉ mục phân biệt chữ hoa chữ thường. Trong các tình huống cần hành vi không phân biệt chữ hoa chữ thường, tùy chọn duy nhất là chuyển đổi / lưu trữ tất cả các chuỗi của bạn thành chữ hoa hoặc chữ thường và sau đó thực hiện so sánh. Như bạn có thể tưởng tượng, điều này gây ra rất nhiều rắc rối với các truy vấn và hoạt động lập chỉ mục.
Thuộc tính Collation có thể được đặt ở cấp bộ sưu tập hoặc rõ ràng khi tạo chỉ mục.
-
Đặt Thuộc tính đối chiếu ở cấp bộ sưu tập
Nếu được đặt ở cấp bộ sưu tập, nó không cần phải được chỉ định với mọi lệnh tạo-chỉ mục trên vì chỉ mục kế thừa Đối chiếu của bộ sưu tập . Trừ khi được chỉ định rõ ràng trong thời gian tạo, một bộ sưu tập không có Đối chiếu nào được liên kết với nó. Bạn có thể xác định chi tiết Đối chiếu của bộ sưu tập của mình bằng các lệnh được cung cấp bên dưới:
>db.createCollection("test") >db.getCollectionInfos({name: test'}); [ { "name" : "test", "type" : "collection", "options" : { }, "info" : { "readOnly" : false }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test" } } ]
-
Đặt Thuộc tính đối chiếu khi tạo chỉ mục
Dưới đây là cách bạn có thể chỉ định rõ ràng một Ghép nối khi tạo bộ sưu tập:
>db.createCollection("test2", { collation: { locale: 'en_US', strength: 2 } } ); >db.getCollectionInfos({name: 'test2'}) [ { "name" : "test2", "type" : "collection", "options" : { "collation" : { "locale" : "en_US", "caseLevel" : false, "caseFirst" : "off", "strength" : 2, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } }, "info" : { "readOnly" : false }, "idIndex" : { "v" : 2, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test.test2", "collation" : { "locale" : "en_US", "caseLevel" : false, "caseFirst" : "off", "strength" : 2, "numericOrdering" : false, "alternate" : "non-ignorable", "maxVariable" : "punct", "normalization" : false, "backwards" : false, "version" : "57.1" } } } ]
-
Đặt Thuộc tính đối chiếu trong khi tạo chỉ mục
Bạn cũng có tùy chọn đặt Đối chiếu rõ ràng cho một chỉ mục trong khi xây dựng nó. Ví dụ:thêm “chỉ mục” vào thuộc tính tên của bộ sưu tập thử nghiệm với ngôn ngữ ‘en’ và độ mạnh 2:
>db.test.createIndex( { name: 1}, { collation: { locale: 'en', strength: 2 } })
-
Cách truy vấn bằng đối chiếu
Thuộc tính Collation cần được chỉ định tại thời điểm truy vấn để sử dụng chỉ mục được tạo bằng Collation:
db.test.find({name:'blah'})
Cách truy vấn các chỉ mục không phân biệt chữ hoa chữ thường với Collation trong MongoDBC Nhấp vào Tweet
-
Chỉ định đối chiếu trong Truy vấn của bạn
Truy vấn này sẽ không sử dụng chỉ mục được chỉ định ở trên vì Đối chiếu không được chỉ định. Để tận dụng Sự đối chiếu, chúng ta cần chỉ định nó một cách rõ ràng trong truy vấn:
db.test.find({name:'blah'}).collation({ locale: 'en', strength: 2 })
Ngay cả khi bộ sưu tập của bạn có Đối chiếu mặc định, bạn vẫn cần chỉ định Đối chiếu trong truy vấn của mình. Nếu không, MongoDB sẽ không sử dụng chỉ mục cụ thể:
-
Đối chiếu khi nâng cấp từ phiên bản MongoDB cũ hơn (3.2.x)
Nếu bạn nâng cấp từ phiên bản MongoDB cũ hơn (Ví dụ:3.2.x), các chỉ mục hiện có sẽ không hỗ trợ Đối chiếu. Để bắt đầu và chạy Collation, bước đầu tiên của bạn là đảm bảo rằng tất cả các tính năng mới của 3.4.x đã được bật:
db.adminCommand( { setFeatureCompatibilityVersion: "3.4" } )
Nâng cấp phiên bản #MongoDB để tạo chỉ mục không phân biệt chữ hoa chữ thường bằng cách sử dụng CollationClick To TweetThông tin thêm về các điểm không tương thích được cung cấp trong ghi chú phát hành MongoDB 3.x. Xin lưu ý rằng khi bạn thực hiện các bước này, việc hạ cấp trở lại 3.2 sẽ khó hơn. Bước tiếp theo của chúng tôi là kiểm tra phiên bản chỉ mục của bạn.
Khi bạn đã nâng cấp lên 3,4 khả năng tương thích, bạn có thể tạo chỉ mục mới bằng cách làm theo các bước chúng tôi đã nêu trước đó. Nếu bạn đang tạo một chỉ mục lớn, hãy sử dụng công việc xây dựng chỉ mục cuộn ScaleGrid để thêm các chỉ mục của bạn: