Đối chiếu MongoDB

Matthew Chestnut là Cố vấn cấp cao tại ThreeWill. Ông có hơn 25 năm kinh nghiệm phát triển phần mềm về các ứng dụng năng suất kinh doanh của doanh nghiệp và phòng ban. Ông có thành tích đã được chứng minh về phát triển phần mềm chất lượng, quản lý dự án theo ngân sách và quản lý các nhóm phát triển phần mềm thành công

Cài đặt đối chiếu MongoDB

Được giới thiệu trong phiên bản 3. 4, các cài đặt MongoDB này ảnh hưởng đến cách dữ liệu được chọn và thứ tự dữ liệu được trả về

Bài đăng này sẽ chứng minh các cài đặt đối chiếu được sử dụng và kết quả của các cài đặt đó. Tôi có một bộ dữ liệu, truy vấn và kết quả mẫu, cùng với một số nhận xét, để hỗ trợ cho các kết luận này

Trường hợp sử dụng

Chúng tôi đã có trường hợp sử dụng sau trong một dự án gần đây sử dụng MongoDB (phiên bản 4. 2)

  • Người dùng muốn tìm dữ liệu trong bộ sưu tập dựa trên giá trị chuỗi do người dùng nhập
  • Thuộc tính để tìm kiếm trong bộ sưu tập là dữ liệu chuỗi
  • Dữ liệu nên được tìm thấy bất kể ký tự “trường hợp”;
  • Sử dụng tìm kiếm loại "bao gồm" thay vì đối sánh chính xác;
  • Bỏ qua dấu khi khớp dữ liệu;
  • Thứ tự sắp xếp của kết quả phải phân biệt chữ hoa chữ thường

Chi tiết triển khai

Để đáp ứng trường hợp sử dụng được trình bày, chúng tôi đã làm như sau

  • Đã sử dụng mẫu đường dẫn tổng hợp MongoDB với “allowDiskUse” để hỗ trợ các tập dữ liệu lớn, hàng triệu mục
  • Đã sử dụng truy vấn biểu thức chính quy không phân biệt chữ hoa chữ thường
  • Đã sử dụng đối chiếu để truy xuất kết quả theo thứ tự phân biệt chữ hoa chữ thường

Dưới đây là thông tin chúng tôi đã sử dụng để đưa ra các quyết định triển khai này cùng với dữ liệu mẫu và truy vấn để chứng minh các cài đặt khác nhau thay đổi kết quả như thế nào

Thông tin MongoDB

Đây là thông tin ảnh hưởng đến thử nghiệm và quyết định của chúng tôi

bộ sưu tập

Đối chiếu cho phép người dùng chỉ định các quy tắc dành riêng cho ngôn ngữ để so sánh chuỗi, chẳng hạn như quy tắc cho trường hợp chữ cái và dấu trọng âm. Bạn có thể chỉ định đối chiếu cho một bộ sưu tập hoặc dạng xem, chỉ mục hoặc các hoạt động cụ thể hỗ trợ đối chiếu

Cài đặt “Sức mạnh” đối chiếu

Mức độ so sánh cần thực hiện, phù hợp với Mức độ so sánh của ICU

  • Tài liệu MongoDB. https. // tài liệu. mongodb. com/thủ công/tham khảo/đối chiếu/chỉ mục. html
  • Các thành phần quốc tế cho các tiêu chuẩn Unicode (ICU). https. // tài liệu. mongodb. com/manual/tham khảo/đối chiếu/
Tài liệu MongoDBCác thành phần quốc tế cho Unicode (ICU)Sức mạnh 1 – Mức so sánh chính. Đối chiếu chỉ thực hiện so sánh các ký tự cơ bản, bỏ qua các khác biệt khác như dấu phụ và chữ hoa chữ thường. Cấp tiểu học. Thông thường, ký tự này được sử dụng để biểu thị sự khác biệt giữa các ký tự cơ bản (ví dụ: “a” < “b”). Đó là sự khác biệt mạnh mẽ nhất. Ví dụ: từ điển được chia thành các phần khác nhau theo ký tự cơ sở. Đây còn được gọi là sức mạnh cấp 1. Điểm mạnh 2 – Mức độ so sánh thứ cấp. Đối chiếu thực hiện so sánh cho đến những khác biệt thứ cấp, chẳng hạn như dấu phụ. Nghĩa là phép đối chiếu thực hiện so sánh các ký tự cơ sở (khác biệt chính) và dấu phụ (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 trung học. Trọng âm trong các ký tự được coi là khác biệt phụ (ví dụ: “as” < “às” < “at”). Sự khác biệt khác giữa các chữ cái cũng có thể được coi là sự khác biệt thứ cấp, tùy thuộc vào ngôn ngữ. Sự khác biệt thứ cấp bị bỏ qua khi có sự khác biệt chính ở bất kỳ đâu trong chuỗi. Đây còn được gọi là cường độ cấp 2
Ghi chú. Trong một số ngôn ngữ (chẳng hạn như tiếng Đan Mạch), một số chữ cái có dấu được coi là các ký tự cơ sở riêng biệt. Tuy nhiên, trong hầu hết các ngôn ngữ, một chữ cái có dấu chỉ có sự khác biệt thứ cấp so với phiên bản không có dấu của chữ cái đó
Điểm mạnh 3 – So sánh cấp ba. Đố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), dấu phụ (sự khác biệt thứ cấp), 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à mức cường độ mặc định nếu cường độ không được chỉ định. Bậc đại học. Sự khác biệt giữa chữ hoa và chữ thường trong các ký tự được phân biệt ở cấp độ thứ ba (ví dụ: “ao” < “Ao” < “aò”). Ngoài ra, một biến thể của một chữ cái khác với dạng cơ bản ở cấp độ thứ ba (chẳng hạn như “A” và “Ⓐ”). Một ví dụ khác là sự khác biệt giữa Kana lớn và nhỏ. Sự khác biệt cấp ba bị bỏ qua khi có sự khác biệt chính hoặc phụ ở bất kỳ đâu trong chuỗi. Đây còn được gọi là cường độ cấp 3

 

Chỉ mục đối chiếu

Đối với mục đích của bài đăng này, tôi đã cố tình bỏ qua bất kỳ việc tạo và sử dụng chỉ mục nào liên quan đến các truy vấn và kết quả mẫu

Đối chiếu và sử dụng chỉ mục

Nhìn thấy. https. // tài liệu. mongodb. com/thủ công/tham khảo/đối chiếu/chỉ mục. html

Để 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. Nghĩa là, một chỉ mục có đối chiếu không thể hỗ trợ 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

Biểu thức chính quy và sử dụng chỉ mục

Nhìn thấy.

Đối với các truy vấn biểu thức chính quy phân biệt chữ hoa chữ thường, nếu một chỉ mục tồn tại cho trường, thì MongoDB sẽ so khớp biểu thức chính quy với các giá trị trong chỉ mục, quá trình này có thể nhanh hơn quét bộ sưu tập

Các truy vấn biểu thức chính quy phân biệt chữ hoa chữ thường thường không thể sử dụng các chỉ mục một cách hiệu quả. Việc triển khai $regex không nhận biết đối chiếu và không thể sử dụng các chỉ mục phân biệt chữ hoa chữ thường

Tùy chọn “allowDiskUse”

Nhìn thấy.

Nếu MongoDB không thể sử dụng chỉ mục để lấy tài liệu theo thứ tự sắp xếp được yêu cầu, kích thước tổng hợp của tất cả tài liệu trong thao tác sắp xếp, cộng với chi phí nhỏ, phải nhỏ hơn 32 megabyte

Nếu vượt quá kích thước, bạn sẽ gặp lỗi Tràn mức sử dụng dữ liệu được đệm trong giai đoạn sắp xếp vượt quá giới hạn nội bộ

Để cho phép xử lý các bộ dữ liệu lớn, bạn có thể đặt tùy chọn allowDiskUse trong phương thức tổng hợp(). Tùy chọn allowDiskUse cho phép hầu hết các hoạt động đường dẫn tổng hợp ghi dữ liệu vào một tệp tạm thời

Truy vấn mẫu và dữ liệu mẫu

Dưới đây là dữ liệu mẫu và truy vấn thể hiện tác động của cài đặt đối chiếu

Truy vấn 1 – Chọn tất cả các hàng

truy vấn 1. 1

  • Không có đối chiếu được chỉ định
  • Thứ tự sắp xếp có phân biệt chữ hoa chữ thường

[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[{ $sort. { "Tên". 1 } }],
{
"đối chiếu". { "ngôn ngữ". "vi", sức mạnh. 1 },
"allowDiskUse". true
}
)[/ps]

Dữ liệu mẫu

AAA001
EEE003
EXTRA AAA009
EXTRA EEE015
EXTRA ZZZ021
EXTRA aaa010
EXTRA eee016
EXTRA zzz022
EXTRA ÉÉÉ017
EXTRA ééé018
ZZZ023
aaa002
eee004
extra AAA007
extra EEE011
extra ZZZ019
extra aaa008
extra eee012
extra zzz020
extra ÉÉÉ013
extra ééé014
zzz024
ÉÉÉ005
ééé006

Truy vấn 2 – So khớp chính xác giá trị thuộc tính trong đó Mã = “eee”

truy vấn 2. 1

  • Không có đối chiếu được chỉ định
  • Tìm kiếm phân biệt chữ hoa chữ thường
  • Tìm kiếm nhạy cảm với dấu phụ
  • Thứ tự sắp xếp phân biệt chữ hoa chữ thường.  

[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"allowDiskUse". đúng
}
)[/ps]

Dữ liệu mẫu

AAA001
aaa002
EEE003
eee004
ÉÉÉ005
ééé006
extra AAA007
extra aaa008
EXTRA AAA009
EXTRA aaa010
extra EEE011
extra eee012
extra ÉÉÉ013
extra ééé014
EXTRA EEE015
EXTRA eee016
EXTRA ÉÉÉ017
EXTRA ééé018
extra ZZZ019
extra zzz020
EXTRA ZZZ021
EXTRA zzz022
ZZZ023
zzz024

Truy vấn 2 – So khớp chính xác giá trị thuộc tính trong đó Mã = “eee”

truy vấn 2. 1

  • Không có đối chiếu được chỉ định
  • Tìm kiếm phân biệt chữ hoa chữ thường
  • Tìm kiếm nhạy cảm với dấu phụ
  • Thứ tự sắp xếp phân biệt chữ hoa chữ thường.  

[ps] db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"allowDiskUse". true
}
) [/ps]

Dữ liệu mẫu

EXTRA eee016
eee004
extra eee012

truy vấn 2. 2

  • Tìm kiếm không phân biệt chữ hoa chữ thường
  • Việc tìm kiếm là dấu phụ không nhạy cảm
  • Thứ tự sắp xếp không phân biệt chữ hoa chữ thường
  • Điểm mạnh 1 – Đối chiếu chỉ thực hiện so sánh các ký tự cơ bản, bỏ qua các khác biệt khác như dấu phụ và chữ hoa chữ thường

[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"đối chiếu". { "ngôn ngữ". "vi", sức mạnh. 1 },
"allowDiskUse". true
}
)
[/ps]

Dữ liệu mẫu

EEE003
eee004
ÉÉÉ005
ééé006
extra EEE011
extra eee012
extra ÉÉÉ013
extra ééé014
EXTRA EEE015
EXTRA eee016
EXTRA ÉÉÉ017
EXTRA ééé018

truy vấn 2. 3

  • Tìm kiếm không phân biệt chữ hoa chữ thường
  • Tìm kiếm nhạy cảm với dấu phụ
  • Thứ tự sắp xếp không phân biệt chữ hoa chữ thường
  • Sức mạnh 2 – Phép đối chiếu thực hiện so sánh cho đến các khác biệt phụ, chẳng hạn như dấu phụ. Nghĩa là phép đối chiếu thực hiện so sánh các ký tự cơ sở (khác biệt chính) và dấu phụ (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.  

[ps]db. getCollection(‘SortTest’)
. tổng hợp(
[
{ $match. { "Mã số". "eee" } },
{ $sort. { "Tên". 1 } }
],
{
"đối chiếu". { "ngôn ngữ". "vi", sức mạnh. 2 },
"allowDiskUse". true
}[/ps]

Dữ liệu mẫu

EEE003
eee004
extra EEE011
extra eee012
EXTRA EEE015
EXTRA eee016

truy vấn 2. 4

  • Tìm kiếm phân biệt chữ hoa chữ thường
  • Tìm kiếm nhạy cảm với dấu phụ
  • Thứ tự sắp xếp không phân biệt chữ hoa chữ thường

Cường độ 3 – Đây là mức cường độ mặc định nếu mức cường độ không được chỉ đị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), dấu phụ (sự khác biệt thứ cấp), 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

Đối chiếu trong MongoDB là gì?

Đối chiếu cho phép người dùng chỉ định các quy tắc dành riêng cho ngôn ngữ để so sánh chuỗi , chẳng hạn như quy tắc cho chữ cái và dấu trọng âm. Bạn có thể chỉ định đối chiếu cho một bộ sưu tập hoặc dạng xem, chỉ mục hoặc các hoạt động cụ thể hỗ trợ đối chiếu.

MongoDB có hỗ trợ đối chiếu không?

MongoDB hỗ trợ đối chiếu trên hầu hết các thao tác và tập hợp CRUD . Để có danh sách đầy đủ các thao tác được hỗ trợ, hãy xem trang hướng dẫn sử dụng máy chủ Operations that Support Collations. Để biết danh sách đầy đủ các ngôn ngữ được hỗ trợ, hãy xem trang hướng dẫn sử dụng máy chủ của chúng tôi trên Ngôn ngữ và ngôn ngữ được hỗ trợ.

Đối chiếu trong Java là gì?

Lớp Collator thực hiện so sánh Chuỗi nhạy cảm với ngôn ngữ . Bạn sử dụng lớp này để xây dựng các thói quen tìm kiếm và sắp xếp cho văn bản ngôn ngữ tự nhiên. Collator là một lớp cơ sở trừu tượng. Các lớp con thực hiện các chiến lược đối chiếu cụ thể.

Làm cách nào để làm cho MongoDB không phân biệt chữ hoa chữ thường?

Để sử dụng chỉ mục phân biệt chữ hoa chữ thường trên bộ sưu tập không có đối chiếu mặc định, tạo chỉ mục có đối chiếu và đặt tham số cường độ thành 1 hoặc 2 (see Collation for a detailed description of the strength parameter). You must specify the same collation at the query level in order to use the index-level collation.