Tài liệu về nhà → Hướng dẫn sử dụng MongoDB → MongoDB Manual
Đối chiếu cho phép người dùng chỉ định các quy tắc cụ thể về ngôn ngữ để so sánh chuỗi, chẳng hạn như các quy tắc cho Lettercase và Dấu nhấn.
Bạn có thể chỉ định đối chiếu cho một bộ sưu tập hoặc chế độ xem, chỉ mục hoặc các hoạt động cụ thể hỗ trợ đối chiếu.
Một tài liệu đối chiếu có các trường sau:
{ locale: , caseLevel: , caseFirst: , strength: , numericOrdering: , alternate: , maxVariable: , backwards: }
Khi chỉ định đối chiếu, trường
{ "locale" : "@collation=" }
2 là bắt buộc; Tất cả các trường đối chiếu khác là tùy chọn. Để biết mô tả của các trường, xem tài liệu đối chiếu.Collation Document.Giá trị tham số đối chiếu mặc định khác nhau tùy thuộc vào ngôn ngữ bạn chỉ định. Để biết danh sách đầy đủ các tham số đối chiếu mặc định và các địa phương mà chúng được liên kết, xem các tham số mặc định đối chiếu.
{ "locale" : "@collation=" } | sợi dây | Địa điểm ICU. Xem các ngôn ngữ được hỗ trợ và địa phương để biết danh sách các địa phương được hỗ trợ. Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị 2 của 5.
| ||||||||||
{ "locale" : "@collation=" } | Số nguyên | Không bắt buộc. Mức độ so sánh để thực hiện. Tương ứng với mức so sánh ICU. Các giá trị có thể là:ICU Comparison Levels. Possible values are:
Mức độ so sánh chính. Đối chiếu chỉ thực hiện so sánh các ký tự cơ sở, bỏ qua những khác biệt khác như điều chỉnh và trường hợp.ICU Collation: Comparison Levels for details. | ||||||||||
{ "locale" : "@collation=" } | boolean | Mức độ so sánh thứ cấp. Đối chiếu thực hiện so sánh lên đến sự khác biệt thứ cấp, chẳng hạn như diacritics. Đó là, đối chiếu thực hiện so sánh các ký tự cơ sở [sự khác biệt chính] và điều chỉnh [sự khác biệt thứ cấp]. Sự khác biệt giữa các ký tự cơ sở được ưu tiên hơn sự khác biệt thứ cấp. Cấp độ đại học so sánh. Đối chiếu thực hiện so sánh với sự khác biệt cấp ba, chẳng hạn như các biến thể trường hợp và chữ cái. Nghĩa là, đối chiếu thực hiện so sánh các ký tự cơ sở [sự khác biệt chính], điều chỉnh [sự khác biệt thứ cấp], và trường hợp và biến thể [sự khác biệt cấp ba]. Sự khác biệt giữa các ký tự cơ sở được ưu tiên hơn sự khác biệt thứ cấp, được ưu tiên hơn sự khác biệt cấp ba.
Mức độ giống hệt nhau. Giới hạn cho trường hợp sử dụng cụ thể của breaker tie. Xem đối chiếu ICU: Mức so sánh để biết chi tiết.ICU Collation: Case Level. | ||||||||||
{ "locale" : "zh@collation=unihan" } | sợi dây | Địa điểm ICU. Xem các ngôn ngữ được hỗ trợ và địa phương để biết danh sách các địa phương được hỗ trợ. Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị 2 của 5.
| ||||||||||
db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ] | boolean | Số nguyên Không bắt buộc. Mức độ so sánh để thực hiện. Tương ứng với mức so sánh ICU. Các giá trị có thể là: Giá trị Mức độ so sánh chính. Đối chiếu chỉ thực hiện so sánh các ký tự cơ sở, bỏ qua những khác biệt khác như điều chỉnh và trường hợp. Mức độ so sánh thứ cấp. Đối chiếu thực hiện so sánh lên đến sự khác biệt thứ cấp, chẳng hạn như diacritics. Đó là, đối chiếu thực hiện so sánh các ký tự cơ sở [sự khác biệt chính] và điều chỉnh [sự khác biệt thứ cấp]. Sự khác biệt giữa các ký tự cơ sở được ưu tiên hơn sự khác biệt thứ cấp.numericOrdering Restrictions. | ||||||||||
db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ] | sợi dây | Địa điểm ICU. Xem các ngôn ngữ được hỗ trợ và địa phương để biết danh sách các địa phương được hỗ trợ. Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị 2 của 5.
Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị 2 của 5.ICU Collation: Comparison Levels for more information.Số nguyên | ||||||||||
db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ] | sợi dây | Địa điểm ICU. Xem các ngôn ngữ được hỗ trợ và địa phương để biết danh sách các địa phương được hỗ trợ. Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị 2 của 5.
| ||||||||||
db.myColl.find[ { category: "cafe" } ] | boolean | Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị 2 của 5.Số nguyên Không bắt buộc. Mức độ so sánh để thực hiện. Tương ứng với mức so sánh ICU. Các giá trị có thể là: Giá trị | ||||||||||
db.myColl.find[ { category: "cafe" } ] | boolean | Không bắt buộc. Cờ xác định xem có nên kiểm tra xem văn bản có yêu cầu chuẩn hóa và thực hiện bình thường hóa hay không. Nói chung, phần lớn văn bản không yêu cầu xử lý chuẩn hóa này. Nếu 1, hãy kiểm tra xem có chuẩn hóa hoàn toàn và thực hiện chuẩn hóa để so sánh văn bản không.Nếu 4, không kiểm tra.Giá trị mặc định là 4.Xem //userguide.icu-project.org/collation/concepts#toc-cormalization để biết chi tiết.//userguide.icu-project.org/collation/concepts#TOC-Normalization for details. |
Bạn có thể chỉ định đối chiếu cho các hoạt động sau:
Ghi chú
Bạn không thể chỉ định nhiều đối chiếu cho một hoạt động. Ví dụ: bạn không thể chỉ định các đối chiếu khác nhau trên mỗi trường hoặc nếu thực hiện tìm thấy với một loại, bạn không thể sử dụng một đối chiếu cho tìm và một đối với loại khác.
Một số địa phương đối chiếu có các biến thể, sử dụng các quy tắc cụ thể về ngôn ngữ cụ thể. Để chỉ định một biến thể địa phương, hãy sử dụng cú pháp sau:
{ "locale" : "@collation=" }
Ví dụ, để sử dụng biến thể
db.myColl.find[ { category: "cafe" } ]
8 của đối chiếu Trung Quốc:{ "locale" : "zh@collation=unihan" }
Để biết danh sách đầy đủ tất cả các địa phương đối chiếu và các biến thể của chúng, xem các địa phương đối chiếu.
Bạn có thể chỉ định một đối chiếu mặc định cho chế độ xem tại thời điểm sáng tạo. Nếu không có đối chiếu được chỉ định, đối chiếu mặc định của chế độ xem là bộ thu thập so sánh nhị phân "đơn giản". Đó là, chế độ xem không kế thừa đối chiếu mặc định của bộ sưu tập.
So sánh chuỗi trên chế độ xem Sử dụng đối chiếu mặc định của chế độ xem. Một hoạt động cố gắng thay đổi hoặc ghi đè lên đối chiếu mặc định của chế độ xem sẽ thất bại với lỗi.
Nếu tạo chế độ xem từ một chế độ xem khác, bạn không thể chỉ định một đối chiếu khác với đối chiếu của Chế độ xem Nguồn.
Nếu thực hiện một tập hợp liên quan đến nhiều chế độ xem, chẳng hạn như với
9 hoặcdb.myColl.find[ { category: "cafe" } ]
0, các quan điểm phải có cùng một đối chiếu.db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
Để sử dụng một chỉ mục để so sánh chuỗi, một thao tác cũng phải chỉ định cùng một đối chiếu. Đó là, một chỉ mục với một đối chiếu không thể hỗ trợ một thao tác thực hiện so sánh chuỗi trên các trường được lập chỉ mục nếu thao tác chỉ định một đối chiếu khác.
Ví dụ: Bộ sưu tập
db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
1 có chỉ mục trên trường chuỗi db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
2 với locale đối chiếu db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
3.db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]
Hoạt động truy vấn sau, chỉ định đối chiếu giống như chỉ mục, có thể sử dụng chỉ mục:
db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ]
Tuy nhiên, thao tác truy vấn sau, theo mặc định sử dụng bộ ghép nhị phân "đơn giản", không thể sử dụng chỉ mục:
db.myColl.find[ { category: "cafe" } ]
Đối với một chỉ số ghép trong đó các khóa tiền tố chỉ mục không phải là chuỗi, mảng và tài liệu nhúng, một hoạt động chỉ định một đối chiếu khác vẫn có thể sử dụng chỉ mục để hỗ trợ so sánh trên các phím tiền tố chỉ mục.
Ví dụ: Bộ sưu tập
db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
1 có chỉ số hợp chất trên các trường số db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
5 và db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
6 và trường chuỗi db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
2; Chỉ mục được tạo với locale đối chiếu db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
3 để so sánh chuỗi:db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
Các hoạt động sau, sử dụng đối chiếu nhị phân
{ "locale" : "@collation=" }
5 để so sánh chuỗi, có thể sử dụng chỉ mục:db.myColl.find[ { score: 5 } ].sort[ { price: 1 } ] db.myColl.find[ { score: 5, price: { $gt: NumberDecimal[ "10" ] } } ].sort[ { price: 1 } ]
Hoạt động sau, sử dụng đối chiếu nhị phân
{ "locale" : "@collation=" }
5 để so sánh chuỗi trên trường db.myColl.createIndex[ { score: 1, price: 1, category: 1 }, { collation: { locale: "fr" } } ]
2 được lập chỉ mục, có thể sử dụng chỉ mục để chỉ thực hiện phần db.myColl.find[ { score: 5 } ].sort[ { price: 1 } ] db.myColl.find[ { score: 5, price: { $gt: NumberDecimal[ "10" ] } } ].sort[ { price: 1 } ]
2 của truy vấn:db.myColl.find[ { score: 5, category: "cafe" } ]
Các chỉ mục sau đây chỉ hỗ trợ so sánh nhị phân đơn giản và không hỗ trợ đối chiếu:collation:
chỉ mục văn bản,
Chỉ số 2D và
GEOHAYSTACK INDEXES.
Mẹo
Để tạo một chỉ mục
db.myColl.find[ { score: 5 } ].sort[ { price: 1 } ] db.myColl.find[ { score: 5, price: { $gt: NumberDecimal[ "10" ] } } ].sort[ { price: 1 } ]
3, db.myColl.find[ { score: 5 } ].sort[ { price: 1 } ] db.myColl.find[ { score: 5, price: { $gt: NumberDecimal[ "10" ] } } ].sort[ { price: 1 } ]
4 hoặc db.myColl.find[ { score: 5 } ].sort[ { price: 1 } ] db.myColl.find[ { score: 5, price: { $gt: NumberDecimal[ "10" ] } } ].sort[ { price: 1 } ]
5 trên bộ sưu tập có đối chiếu không đơn giản, bạn phải chỉ định rõ ràng db.myColl.find[ { score: 5 } ].sort[ { price: 1 } ] db.myColl.find[ { score: 5, price: { $gt: NumberDecimal[ "10" ] } } ].sort[ { price: 1 } ]
6 khi tạo chỉ mục.Khi chỉ định
db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]
3 là { "locale" : "zh@collation=unihan" }
1 Các hạn chế sau áp dụng:Chỉ có các chuỗi số nguyên không âm tính của các chữ số được xem xét trong các so sánh.
3 không hỗ trợ:db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]
0db.myColl.find[ { score: 5, category: "cafe" } ]
1db.myColl.find[ { score: 5, category: "cafe" } ]
Các phân tách thập phân, như các điểm thập phân và dấu phẩy thập phân
số mũ
Chỉ các điểm mã Unicode trong danh mục số hoặc chữ số thập phân [ND] được coi là chữ số.
Nếu độ dài chữ số vượt quá 254 ký tự, các ký tự dư được coi là một số riêng biệt.
Xem xét một bộ sưu tập với số chuỗi sau và giá trị thập phân:
db.c.insertMany[ [ { "n" : "1" }, { "n" : "2" }, { "n" : "2.1" }, { "n" : "-2.1" }, { "n" : "2.2" }, { "n" : "2.10" }, { "n" : "2.20" }, { "n" : "-10" }, { "n" : "10" }, { "n" : "20" }, { "n" : "20.1" } ] ]
Truy vấn
db.myColl.find[ { score: 5, category: "cafe" } ]
2 sau đây sử dụng tài liệu đối chiếu chứa tham số db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]
3:{ "locale" : "@collation=" }
0Hoạt động trả về các kết quả sau:
{ "locale" : "@collation=" }
1
4 sắp xếp các giá trị chuỗi theo thứ tự tăng dần như thể chúng là các giá trị số.db.myColl.find[ { score: 5, category: "cafe" } ]
Hai giá trị âm
5 vàdb.myColl.find[ { score: 5, category: "cafe" } ]
6 không được sắp xếp theo thứ tự sắp xếp dự kiến vì chúng có các ký tựdb.myColl.find[ { score: 5, category: "cafe" } ]
1 không được hỗ trợ.db.myColl.find[ { score: 5, category: "cafe" } ]
Giá trị
8 được sắp xếp trước giá trịdb.myColl.find[ { score: 5, category: "cafe" } ]
9, do thực tế là tham sốdb.myColl.find[ { score: 5, category: "cafe" } ]
3 không hỗ trợ các giá trị thập phân.db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]
Do đó,
8 vàdb.myColl.find[ { score: 5, category: "cafe" } ]
9 được sắp xếp theo thứ tự từ vựng.db.myColl.find[ { score: 5, category: "cafe" } ]