Hướng dẫn collation mongodb - đối chiếu mongodb

Tài liệu về nhà → Hướng dẫn sử dụng MongoDBMongoDB 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.

Đồng ruộng

Loại hình

Sự mô tả

{ "locale" : "@collation=" }

2

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ị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.

{ "locale" : "@collation=" }

6

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:

Giá trị

Sự mô tả

1

sợi dây

2

Đị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ợ.

3

Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.

Số nguyên

4

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à:

5

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.ICU Collation: Comparison Levels for details.

{ "locale" : "@collation=" }

7

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.

  • Đây là cấp độ mặc định.

  • Cấp bậc bốn. Giới hạn cho trường hợp sử dụng cụ thể để xem xét dấu câu khi các cấp 1-3 bỏ qua dấu câu hoặc để xử lý văn bản Nhật Bản.

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" }

8

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ị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.

Giá trị

Sự mô tả

{ "locale" : "zh@collation=unihan" }

9

sợi dây

db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]

0

Đị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ợ.

db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]

1

Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.//userguide.icu-project.org/collation/customization for details of differences.

db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]

3

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" } ]

1

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ị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.

Giá trị

Sự mô tả

db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ]

2

sợi dây

db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ]

3

Đị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ị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.ICU Collation: Comparison Levels for more information.

Số nguyên

db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ]

5

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ị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

5.

Giá trị

Sự mô tả

db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ]

8

sợi dây

db.myColl.find[ { category: "cafe" } ].collation[ { locale: "fr" } ]

9

Đị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ợ.

db.myColl.find[ { category: "cafe" } ]

0

boolean

Để chỉ định so sánh nhị phân đơn giản, chỉ định giá trị

{ "locale" : "@collation=" }

2 của

{ "locale" : "@collation=" }

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" } ]

4

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

{ "locale" : "zh@collation=unihan" }

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

{ "locale" : "zh@collation=unihan" }

4, không kiểm tra.

Giá trị mặc định là

{ "locale" : "zh@collation=unihan" }

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

    db.myColl.find[ { category: "cafe" } ]

    9 hoặc
    db.myColl.createIndex[
    { score: 1, price: 1, category: 1 },
    { collation: { locale: "fr" } } ]
    0, các quan điểm phải có cùng một đối chiếu.

Để 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.

    db.myColl.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]

    3 không hỗ trợ:

    • db.myColl.find[ { score: 5, category: "cafe" } ]

      0

    • db.myColl.find[ { score: 5, category: "cafe" } ]

      1

    • 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=" }

0

Hoạt động trả về các kết quả sau:

{ "locale" : "@collation=" }

1

  • db.myColl.find[ { score: 5, category: "cafe" } ]

    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ố.

  • Hai giá trị âm

    db.myColl.find[ { score: 5, category: "cafe" } ]

    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ợ.

  • Giá trị

    db.myColl.find[ { score: 5, category: "cafe" } ]

    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.createIndex[ { category: 1 }, { collation: { locale: "fr" } } ]

    3 không hỗ trợ các giá trị thập phân.

  • Do đó,

    db.myColl.find[ { score: 5, category: "cafe" } ]

    8 và

    db.myColl.find[ { score: 5, category: "cafe" } ]

    9 được sắp xếp theo thứ tự từ vựng.

Bài Viết Liên Quan

Chủ Đề