Sau MongoDB Capped Collection, hôm nay chúng ta sẽ xem một khái niệm mới MongoDB Regular Expression để gia công mẫu
Ở đây, chúng ta sẽ thấy các toán tử tùy chọn và biểu thức chính MongoDB với các ví dụ. Cùng với điều này, chúng ta sẽ tìm hiểu cách sử dụng regex trong phần tử mảng trong MongoDB và tối ưu hóa truy vấn
Biểu thức chính quy MongoDB là gì?
Biểu thức chính quy MongoDB được sử dụng để khớp các mẫu khác nhau. Điều này hữu ích cho việc tìm chuỗi trong tài liệu
Đôi khi, có thể xảy ra trường hợp bạn không biết mình nên tìm kiếm giá trị trường nào trong tài liệu cho một bộ sưu tập cụ thể. Do đó, chúng ta có thể sử dụng biểu thức chính quy trong MongoDB để tìm ra một số đối sánh duy nhất cho bất kỳ tài liệu nào
i. MongoDB $regex
Toán tử regex MongoDB được sử dụng để tìm kiếm các chuỗi trong bộ sưu tập. Bây giờ chúng ta sẽ lấy một ví dụ để hiểu về toán tử regex
Chúng ta sẽ lấy một bảng ví dụ với hai trường là “Employee_id” và “Employee_name”
Bây giờ chúng ta sẽ viết code tìm “Employee_name” có viết tắt là “ab”
db.Employee.find[{Employee_name : {$regex: "ab" }}].forEach[printjson]
Ở đây, printjson được sử dụng để in từng tài liệu được truy vấn trả về theo cách tốt hơn
Nếu giả sử bộ sưu tập của bạn có tài liệu với tên_nhân viên là “abc123”. Nếu bạn đã nhập tiêu chí tìm kiếm là “abc12”, nó cũng sẽ trả về tất cả các tài liệu có tên là “abc123”. Vì vậy, nếu bạn chỉ muốn thực hiện một truy vấn để tìm kiếm “abc12” thì chúng ta phải sử dụng khớp mẫu chính xác
Để thực hiện khớp mẫu chính xác, chúng tôi sử dụng ký tự ^ và $. Chúng ta sẽ thêm ký tự ^ vào đầu và ký tự $ vào cuối chuỗi
Tên_nhân_viênEmployee_name 20 abc 12 def . .Ở đây ^ được sử dụng để biểu thị rằng một chuỗi bắt đầu bằng một ký tự nhất định và $ được sử dụng để đảm bảo rằng một chuỗi kết thúc bằng một ký tự nhất định
ii. Tùy chọn $ MongoDB
Khi bạn muốn cung cấp một số tùy chọn bổ sung trong toán tử regex thì bạn sẽ sử dụng từ khóa $options. Giả sử bạn muốn tìm kiếm tất cả các tài liệu có “ab” trong Tên_nhân viên của chúng, bất kể nó phân biệt chữ hoa chữ thường hay không phân biệt chữ hoa chữ thường
Để tìm kiếm kết quả mà không xem xét phân biệt chữ hoa chữ thường, chúng tôi sử dụng $options
Đối với điều này, chúng tôi sẽ xem xét các tài liệu sau trong bộ sưu tập của chúng tôi
Người làm việc_idemployee_name 20 ABC 12 DEF 3 ABC12 2 ABC123 89 MNO 7 ABC12 6 ABC12________2___Ở đây $options với tham số 'i' chỉ định rằng chúng tôi muốn thực hiện tìm kiếm mà không cần xem xét chữ hoa hay chữ thường. Điều tương tự cũng sẽ xảy ra với ví dụ của chúng tôi, trong đó “ab” sẽ được tìm kiếm cho dù đó là chữ hoa hay chữ thường
Chúng tôi cũng có thể thực hiện khớp mẫu mà không cần sử dụng toán tử regex MongoDB. Ví dụ dưới đây sẽ cho chúng ta biết làm thế nào để làm điều này
db.Employee.find[{Employee_name: /ab/'}].forEach[printjson]
Ở đây “//” chỉ định rằng tiêu chí tìm kiếm của chúng tôi nằm trong các dấu phân cách này
Tìm nạp tài liệu 'n' cuối cùng từ bộ sưu tập
Có nhiều cách khác nhau để lấy n tài liệu cuối cùng từ một bộ sưu tập
Hãy xem ví dụ để hiểu một cách lấy n tài liệu cuối cùng trong một bộ sưu tập
Tên_nhân_viênEmployee_name 20 abc 12 defỞ đây giới hạn được sử dụng để hiển thị số lượng bản ghi bạn muốn. Ở đây nó đặt là 2 nên nó sẽ tìm kiếm 2 tài liệu cuối cùng. Và -1 được sử dụng để sắp xếp tài liệu theo thứ tự giảm dần
Làm cách nào để sử dụng regex cho phần tử mảng trong MongoDB?
Chúng ta cũng có thể sử dụng biểu thức chính quy MongoDB trong các trường mảng. Khi chúng tôi triển khai chức năng của các thẻ thì điều quan trọng là phải bắt đầu từ từ MongoDB để tìm kiếm tất cả các bài đăng có thẻ này. Bây giờ chúng ta sẽ xem mã cho câu lệnh trên
> db.example.find[{tags:{$regex:"Mongo"}}].pretty[]; { "_id" : ObjectId["590e5b7bd774a89bd3a0c5fb"], "blog_text" : "MongoDB uses regular expression", "tags" : [ "MongoDB", "regular", "expression" ] } > db.example.find[{tags:{$regex:"MongoDB"}}].pretty[]; { "_id" : ObjectId["590e5b7bd774a89bd3a0c5fb"], "blog_text" : "MongoDB uses regular expression", "tags" : [ "MongoDB", "regular", "expression" ] } >
Tối ưu hóa truy vấn MongoDB
Chúng tôi có thể tối ưu hóa các truy vấn biểu thức chính quy MongoDB giống như chúng tôi làm trong cơ sở dữ liệu quan hệ. Sau đây là một số khái niệm được sử dụng trong MongoDB để tối ưu hóa truy vấn
- Chúng ta có thể tạo các chỉ mục cơ sở dữ liệu trên các trường tài liệu để truy vấn MongoDB sẽ sử dụng các giá trị được lập chỉ mục này để khớp với biểu thức chính quy. Điều này làm cho việc tìm kiếm và truy xuất dữ liệu từ bộ sưu tập rất nhanh so với quét biểu thức chính quy truyền thống
- Tạo một truy vấn với biểu thức chính quy dưới dạng biểu thức tiền tố trong đó tất cả các kết quả phù hợp có nghĩa là bắt đầu bằng một ký tự chuỗi cụ thể
ví dụ. nếu biểu thức chính quy là ^example, thì truy vấn như vậy sẽ chỉ tìm kiếm những chuỗi bắt đầu bằng ví dụ
Tóm lược
Do đó, chúng tôi đã nghiên cứu về các biểu thức chính quy MongoDB để khớp mẫu với $regex và $option. Cùng với điều này, chúng tôi đã học cách sử dụng regex để tối ưu hóa phần tử mảng và truy vấn