Mongodb regex tìm kiếm nhiều trường

Bạn cần $expr để sử dụng $map nhằm tạo ra một mảng các giá trị boolean và sau đó $allElementsTrue để áp dụng điều kiện AND

db.collection.find({
    $expr: {
        $allElementsTrue: {
            $map: {
                input: [ "$field1", "$field2", "$field3" ],
                in: { $lt: [ "$$this", lastWeekDate ] }
            }
        }
    }
})

CHỈNH SỬA. nếu bạn cần logic đó như một phần của tổng hợp, bạn có thể sử dụng $match tương đương với

{ 
employeeid: 13, 
employeename: “Ishan” 
} 
{ 
employeeid: 19, 
employeename: “Madan” 
} 
{ 
employeeid: 9, 
employeename: “Abhresh” 
} 
{ 
employeeid: 25, 
employeename: “Piyush” 
} 
{ 
employeeid: 11, 
employeename: “Chinmay” 
} 
{ 
employeeid: 19, 
employeename: “Ishan123” 
} 
{ 
employeeid: 20, 
employeename: “Ishan12” 
} 
0

Khi truy xuất tài liệu từ một bộ sưu tập, không phải lúc nào bạn cũng biết giá trị Trường cần tìm. Đây là nơi các biểu thức chính quy có thể giúp truy xuất dữ liệu dựa trên các giá trị tìm kiếm khớp với mẫu.  

Một biểu thức chính quy là một phương thức tổng quát để so khớp các mẫu với chuỗi ký tự. MongoDB hỗ trợ các biểu thức chính quy tương thích với UTF-8 và Perl (PCRE) phiên bản 8. 42. Để biết thêm thông tin, hãy xem Việc làm Full Stack Developer. Chúng ta có thể khớp mẫu trong MongoDB theo hai cách.  

  1. Sử dụng toán tử $regex để khớp Mẫu
  2. Khớp mẫu mà không có toán tử $regex

Sử dụng toán tử $regex để khớp Mẫu

Trong MongoDB, toán tử regex được sử dụng để tìm kiếm các chuỗi cụ thể trong một bộ sưu tập. Ví dụ sau minh họa cách thực hiện điều này. Nó hữu ích khi chúng ta không biết giá trị trường chính xác mà chúng ta đang tìm kiếm trong tài liệu.  

Giả sử chúng ta có bộ sưu tập Nhân viên với tên Trường "employeeid" và "employeename". Giả sử chúng tôi cũng có các tài liệu sau trong bộ sưu tập của mình.  

Id nhân viênTên nhân viên13Ishan18Madan9Abhresh25Piyush11Chinmay19Ishan12320Ishan12

Hãy xem cách chúng tôi có thể thêm các tài liệu này vào cơ sở dữ liệu của mình.  

Đối với hướng dẫn này, bạn cần cài đặt MongoDB và MongoDB Compass trên hệ thống của mình.  

  • Bước 1. Tạo cơ sở dữ liệu “regx” và bộ sưu tập “nhân viên” bằng la bàn MongoDB.  
How To Use Regular Expressions in MongoDB
  • Bước 2. Bây giờ, hãy vào tùy chọn Thêm dữ liệu và chọn chèn tài liệu và thêm các Tài liệu sau vào bộ sưu tập.  
How To Use Regular Expressions in MongoDB
{ 
employeeid: 13, 
employeename: “Ishan” 
} 
{ 
employeeid: 19, 
employeename: “Madan” 
} 
{ 
employeeid: 9, 
employeename: “Abhresh” 
} 
{ 
employeeid: 25, 
employeename: “Piyush” 
} 
{ 
employeeid: 11, 
employeename: “Chinmay” 
} 
{ 
employeeid: 19, 
employeename: “Ishan123” 
} 
{ 
employeeid: 20, 
employeename: “Ishan12” 
} 

Bạn sẽ tìm thấy các tài liệu được thêm vào như.  

How To Use Regular Expressions in MongoDB

Bạn có thể kiểm tra các tài liệu đã tạo trong cơ sở dữ liệu.   

Mở dấu nhắc lệnh và nhập lệnh mongo vào đó và nó sẽ mở mongoshell cho bạn. Bây giờ, sử dụng lệnh sau.  

db. người lao động. tìm thấy(). khá()

Đầu ra sẽ giống như.  

How To Use Regular Expressions in MongoDB

Ghi chú.  

  • Bạn không được phép sử dụng toán tử $regex trong toán tử $in.  
  • Nếu bạn muốn bao gồm một biểu thức chính quy trong danh sách các điều kiện truy vấn được phân tách bằng dấu phẩy, hãy sử dụng toán tử $regex.  
  • Nếu bạn muốn sử dụng các tùy chọn x và s, bạn phải sử dụng biểu thức toán tử $regex kết hợp với $options.  
  • Bắt đầu với phiên bản MongoDB mới nhất, bạn có thể sử dụng toán tử $not kết hợp với biểu thức toán tử $regex.  
  • Nếu chỉ mục của trường được chỉ định có sẵn cho các truy vấn biểu thức chính quy phân biệt chữ hoa chữ thường, thì MongoDB sẽ khớp biểu thức chính quy với các giá trị trong chỉ mục. Thay vì quét tất cả các bộ sưu tập, đây là cách nhanh nhất để tìm một bộ sưu tập phù hợp. Họ không sử dụng hiệu quả chỉ mục cho các truy vấn biểu thức chính quy không phân biệt chữ hoa chữ thường.  
  • Nếu muốn sử dụng các biểu thức chính quy tương thích với Perl mà JavaScript không hỗ trợ, thì bạn phải sử dụng toán tử $regex.  

Để nâng cao sự nghiệp của bạn trong lĩnh vực thiết kế web, hãy đăng ký khóa học Thiết kế web tốt nhất của KnowledgeHut.    

cú pháp.  

{ : { $regex: /pattern/, $options: '' } } 
{ : { $regex: 'pattern', $options: '' } } 

Viết code tìm "tên nhân viên" với các chữ cái đầu "Is. "

db.employee.find({employeename: {$regex: "Is"}}).forEach(printjson) 
How To Use Regular Expressions in MongoDB

Kết quả cho thấy rõ ràng rằng chỉ những tài liệu có ký tự 'Là' trong tên nhân viên được trả về.

Chúng tôi muốn tìm tất cả Tên nhân viên có chứa các ký tự 'Là'. Do đó, chúng tôi sử dụng toán tử $regex để xác định tiêu chí tìm kiếm 'Là'. Tại đây, printjson được dùng để in từng tài liệu do truy vấn trả về theo cách hiệu quả hơn.  

Ví dụ

Giả sử bạn có các tài liệu sau trong bộ sưu tập của mình, với một tài liệu bổ sung có tên Nhân viên "Ishan123. " Nếu bạn nhập "Ishan12" làm tiêu chí tìm kiếm, nó cũng sẽ trả về tài liệu có "Ishan123. "

Nhưng nếu chúng tôi không muốn điều này và chỉ muốn trả lại tài liệu có tên "Ishan12" thì sao? . Chúng tôi sẽ sử dụng các ký tự và $ để khớp mẫu chính xác. Chúng tôi sẽ đặt ký tự ở đầu chuỗi và $ ở cuối.  

db.employee.find({employeename : {$regex: "^Ishan12$"}}).forEach(printjson)  
How To Use Regular Expressions in MongoDB

Trong tiêu chí tìm kiếm, chúng tôi sử dụng các ký tự và $. Biểu tượng đảm bảo rằng chuỗi bắt đầu bằng một ký tự cụ thể và biểu tượng “$” đảm bảo rằng chuỗi kết thúc bằng một ký tự cụ thể. Kết quả là khi code chạy chỉ trả về chuỗi "Ishan12".

Ví dụ

Hiển thị thông tin chi tiết của nhân viên có tên kết thúc bằng 'h'.  

db.employee.find({employeename:{$regex:"h$"}}).pretty()
How To Use Regular Expressions in MongoDB

Chúng tôi đang hiển thị tài liệu của những nhân viên có tên bắt đầu bằng chữ 'h'. Vì vậy, đối với trường employeename trong phương thức find(), chúng ta chuyển một biểu thức chính quy bằng cách sử dụng toán tử $regex (i. e. $regex. "h$").

Khớp mẫu mà không cần toán tử regex

Chúng ta có thể khớp mẫu trong MongoDB mà không cần sử dụng toán tử $regex. Nói một cách đơn giản, bằng cách chỉ định một biểu thức chính quy sử dụng một đối tượng biểu thức chính quy. Bạn cũng có thể sử dụng các biểu thức chính quy bên trong toán tử $in khi sử dụng đối tượng biểu thức chính quy.  

cú pháp.  

{ : /pattern/ } 
// indicates that you should specify your search criteria between these delimiters. 

Ví dụ

db.employee.find({employeename: /Ish/}).forEach(printjson)  
How To Use Regular Expressions in MongoDB

Chúng tôi đang hiển thị tài liệu của nhân viên có tên chứa chuỗi "Ish" trong phần này. Vì vậy, trong phương thức find(), chúng ta chuyển một biểu thức chính quy (i. e. , Tên nhân viên. /Ish/) cho trường tên nhân viên. / cho biết rằng bạn muốn chỉ định tiêu chí tìm kiếm của mình giữa các dấu phân cách này, tôi. e. , /Ish/. Các tùy chọn "//" về cơ bản có nghĩa là giới hạn tiêu chí tìm kiếm của bạn đối với các dấu phân cách này.

Sử dụng Biểu thức regex không phân biệt chữ hoa chữ thường

Trong trường hợp phân biệt chữ hoa chữ thường, biểu thức chính quy sử dụng $options và tham số có giá trị $i. Trong ví dụ này, chúng tôi chỉ ra cách biểu thức chính quy hoạt động trong tình huống phân biệt chữ hoa chữ thường. Truy vấn sau đây sẽ trả về giá trị có chứa "Ishan", bất kể các từ đó nhỏ hơn hay viết hoa.  

Các tùy chọn sau có sẵn để sử dụng với biểu thức chính quy trong MongoDB.  

  • i. Để khớp cả mẫu chữ thường và chữ hoa trong chuỗi.  
  • m. Để bao gồm ^ và $ trong mẫu khớp, i. e. để tìm cụ thể cho ^và $ trong chuỗi. Các neo này sẽ khớp ở đầu hoặc cuối chuỗi nếu tùy chọn này không được chọn.  
  • x. Cho biết rằng tất cả các ký tự khoảng trắng trong mẫu $regex nên được bỏ qua.  
  • s. Để tạo ký tự dấu chấm". " khớp với tất cả các ký tự, bao gồm các ký tự xuống dòng.  

Chúng tôi sẽ đưa ra ví dụ tương tự như được sử dụng trong phần trước.  

Ví dụ: bạn muốn tìm tất cả các tài liệu có từ 'Ish' trong Tên nhân viên, bất kể nó có phân biệt chữ hoa chữ thường hay không. Nếu chúng ta muốn kết quả như vậy, chúng ta phải sử dụng tùy chọn $ với tham số phân biệt chữ hoa chữ thường.  

Id nhân viênTên nhân viên13Ishan18Madan9Abhresh25Piyush11Chinmay19Ishan12320Ishan12

Chạy truy vấn sau.  

db.employee.find({employeename:{$regex: "ish",$options:'i'}}).forEach(printjson) 
How To Use Regular Expressions in MongoDB

Trong truy vấn trên, chúng tôi tìm kiếm 'ish' trong tên nhân viên bất kể trường hợp của nó. Nhưng nó vẫn hiển thị cho chúng ta tất cả các tài liệu, đây là sức mạnh của $options.

Tùy chọn $ với tham số 'I' (không phân biệt chữ hoa chữ thường) chỉ định rằng chúng tôi muốn chạy tìm kiếm bất kể chúng tôi tìm thấy các chữ cái 'Gu' ở dạng chữ thường hay chữ hoa.  

Tối ưu hóa truy vấn biểu thức chính quy

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ư cách chúng tôi thực hiện các truy vấn cơ sở dữ liệu quan hệ. Một số khái niệm được sử dụng trong MongoDB để tối ưu hóa truy vấn như sau.  

Làm cách nào để tìm kiếm trong MongoDB bằng regex?

Trong MongoDB, các .
i. Để khớp cả mẫu chữ thường và chữ hoa trong chuỗi
m. Để bao gồm ^ và $ trong mẫu trong trận đấu tôi. e. để tìm kiếm cụ thể ^ và $ bên trong chuỗi. .
x. Để bỏ qua tất cả các ký tự khoảng trắng trong mẫu $regex

Làm cách nào để tìm kiếm các ký tự đặc biệt trong MongoDB?

Để khớp một ký tự đặc biệt, đặt dấu gạch chéo ngược lên trước ký tự đó , như thế này \*.

Làm cách nào để tìm chuỗi trong MongoDB?

Sử dụng toán tử truy vấn $text để thực hiện tìm kiếm văn bản trên bộ sưu tập có chỉ mục văn bản . $text sẽ mã hóa chuỗi tìm kiếm bằng cách sử dụng khoảng trắng và hầu hết các dấu chấm câu làm dấu phân cách và thực hiện OR logic của tất cả các mã thông báo như vậy trong chuỗi tìm kiếm.

Loại truy vấn được hỗ trợ bởi cơ sở dữ liệu MongoDB là gì?

MongoDB cung cấp các loại toán tử truy vấn sau. So sánh . Hợp lý .