Hướng dẫn how do i search for a regular expression in mongodb? - làm cách nào để tìm kiếm biểu thức chính quy trong mongodb?
Tài liệu về nhà → Hướng dẫn sử dụng MongoDB → MongoDB Manual Đối với dữ liệu được lưu trữ trên Atlas MongoDB, MongoDB cung cấp giải pháp tìm kiếm toàn văn bản, MongoDB Atlas Search. Nếu bạn thường xuyên chạy các truy vấn regex không nhạy cảm trường hợp (sử dụng tùy chọn { name: { $in: [ /^acme/i, /^ack/ ] } } 6 option), MongoDB recommends Atlas Search queries that use the 7 aggregation pipeline stage.Các truy vấn tìm kiếm ATLAS có ý nghĩa cải thiện hiệu suất của các truy vấn văn bản và cung cấp nhiều tùy chọn hơn để tùy chỉnh các tham số truy vấn. Để tìm hiểu thêm, hãy xem MongoDB Atlas tìm kiếm. significiantly improve the performance of text queries and offer more options for customizing query parameters. To learn more, see MongoDB Atlas Search. Để triển khai tự quản lý, bạn có thể tìm thấy thông tin về khả năng Regex của chúng tôi dưới đây., you can find information on our regex capability below. 8 cung cấp các khả năng biểu thức chính quy cho các chuỗi khớp mẫu trong các truy vấn. MongoDB sử dụng các biểu thức thông thường tương thích Perl (tức là "PCRE") phiên bản 8.42 với hỗ trợ UTF-8.Provides regular expression capabilities for pattern matching strings in queries. MongoDB uses Perl compatible regular expressions (i.e. "PCRE" ) version 8.42 with UTF-8 support. Để sử dụng 8, hãy sử dụng một trong các cú pháp sau: 8, use one of the following syntaxes:
Trong MongoDB, bạn cũng có thể sử dụng các đối tượng biểu thức chính quy (nghĩa là 0) để chỉ định các biểu thức thông thường:
Để hạn chế sử dụng cú pháp cụ thể, xem $ regex so với / mẫu / cú pháp.$regex vs. /pattern/ Syntax. 1 Các 2 sau đây có sẵn để sử dụng với biểu thức thông thường.The following 2 are available for use with regular
expression.
Cho phép ký tự DOT (tức là
|
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } |
{ name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } |
{ name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } } |
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 operator expressions inside an { name: { $regex: "(?i)a(?-i)cme" } }
2Bạn không thể sử dụng các biểu thức toán tử
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 bên trong { name: { $regex: "(?i)a(?-i)cme" } }
2{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 operator. For example:{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
Để 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 cho trường, hãy sử dụng toán tử
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8. Ví dụ:{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 operator expression with the
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
1 operator. For example, to specify the { name: { $in: [ /^acme/i, /^ack/ ] } }
6 and the { name: { $regex: /acme.*corp/, $options: "si" } } { name: { $regex: 'acme.*corp', $options: "si" } }
5 options, you must use { name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
1 for both:{ name: { $regex: /acme.*corp/, $options: "si" } } { name: { $regex: 'acme.*corp', $options: "si" } }
Để sử dụng tùy chọn
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
9 hoặc các tùy chọn { name: { $regex: /acme.*corp/, $options: "si" } } { name: { $regex: 'acme.*corp', $options: "si" } }
5, bạn phải sử dụng biểu thức toán tử { name: { $in: [ /^acme/i, /^ack/ ] } }
8 với toán tử { name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
1. Ví dụ: để chỉ định các tùy chọn { name: { $in: [ /^acme/i, /^ack/ ] } }
6 và { name: { $regex: /acme.*corp/, $options: "si" } } { name: { $regex: 'acme.*corp', $options: "si" } }
5, bạn phải sử dụng { name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
1 cho cả hai:{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 operator and specify the regular expression as a string.Để sử dụng các tính năng được hỗ trợ của PCRE trong một biểu thức thông thường không được hỗ trợ trong JavaScript, bạn phải sử dụng toán tử
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 và chỉ định biểu thức thông thường dưới dạng chuỗi.Để phù hợp với các chuỗi không nhạy cảm trường hợp:
5 bắt đầu một trận đấu không phân biệt trường hợp.db.inventory.find( { item: { $not: /^p.*/ } } )
db.inventory.find( { item: { $not: /^p.*/ } } )
6 kết thúc một trận đấu không phân biệt trường hợp.Ví dụ: biểu thức thông thường
7 khớp với các chuỗi đó:db.inventory.find( { item: { $not: /^p.*/ } } )
Bắt đầu với
8 hoặcdb.inventory.find( { item: { $not: /^p.*/ } } )
9. Đây là một trận đấu không nhạy cảm trường hợp.db.inventory.find( { item: { $not: /^p.*/ } } )
Kết thúc với
db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
0. Đây là một trận đấu nhạy cảm trường hợp.
1db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
2db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
Các chuỗi này phù hợp với biểu thức thông thường ví dụ: { name: { $in: [ /^acme/i, /^ack/ ] } }
8 operator to find
db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
4 field strings that match the regular
expression db.inventory.find( { item: { $not: /^p.*/ } } )
7:{ name: { $regex: "(?i)a(?-i)cme" } }
Ví dụ sau sử dụng toán tử
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 để tìm chuỗi trường db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
4 phù hợp với biểu thức thông thường db.inventory.find( { item: { $not: /^p.*/ } } )
7:Toán tử
6 có thể thực hiện thao tác logicdb.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
7 trên cả hai:db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } ) Các đối tượng biểu thức chính quy (tức là
0){ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } } db.inventory.find( { item: { $not: /^p.*/ } } )
Ví dụ: operator expressions
Các đối tượng biểu thức chính quy (tức là
0){ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } } db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
Ví dụ: { name: { $in: [ /^acme/i, /^ack/ ] } }
8 operator expressions.
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 Biểu thức vận hànhTrong 4.0.6 và sớm hơn, bạn có thể sử dụng toán tử
db.inventory.find( { item: { $not: { $regex: "^p.*" } } } ) db.inventory.find( { item: { $not: { $regex: /^p.*/ } } } )
6 với các đối tượng biểu thức thông thường (tức là { name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
0) nhưng không phải với các biểu thức toán tử { name: { $in: [ /^acme/i, /^ack/ ] } }
8.Biểu thức chính quy là "biểu thức tiền tố" nếu nó bắt đầu bằng một cái chăm sóc (
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
5) hoặc neo bên trái (db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
4), theo sau là một chuỗi các ký hiệu đơn giản. Ví dụ, Regex db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
5 sẽ được tối ưu hóa bằng cách chỉ khớp với các giá trị từ chỉ mục bắt đầu với db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
6.Ngoài ra, trong khi
db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
7, db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
8 và db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
9 khớp các chuỗi tương đương, chúng có các đặc điểm hiệu suất khác nhau. Tất cả các biểu thức này sử dụng một chỉ mục nếu một chỉ mục thích hợp tồn tại; Tuy nhiên, db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
8 và db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
9 chậm hơn. db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
7 có thể ngừng quét sau khi khớp tiền tố.Trường hợp các truy vấn biểu thức chính quy không nhạy cảm 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
{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 không nhận thức được đối chiếu và không thể sử dụng các chỉ số không nhạy cảm trường hợp.Các ví dụ trong phần này sử dụng bộ sưu tập
db.products.find( { sku: { $regex: /789$/ } } )
4 sau:db.products.insertMany( [ { _id: 100, sku: "abc123", description: "Single line description." }, { _id: 101, sku: "abc789", description: "First line\nSecond line" }, { _id: 102, sku: "xyz456", description: "Many spaces before line" }, { _id: 103, sku: "xyz789", description: "Multiple\nline description" }, { _id: 104, sku: "Abc789", description: "SKU starts with A" } ] )
Ví dụ sau phù hợp với tất cả các tài liệu trong đó trường
db.products.find( { sku: { $regex: /789$/ } } )
5 giống như db.products.find( { sku: { $regex: /789$/ } } )
6:db.products.find( { sku: { $regex: /789$/ } } )
Ví dụ tương tự như câu lệnh SQL giống như sau:
{ : /pattern/ }
0Ví dụ đầu ra:
{ : /pattern/ }
1Ví dụ sau đây sử dụng tùy chọn
{ name: { $in: [ /^acme/i, /^ack/ ] } }
6 thực hiện phù hợp không phân biệt chữ hoa chữ thường cho các tài liệu có giá trị db.products.find( { sku: { $regex: /789$/ } } )
5 bắt đầu bằng db.products.find( { sku: { $regex: /789$/ } } )
9.{ : /pattern/ }
2Ví dụ đầu ra:
{ : /pattern/ }
3Ví dụ sau đây sử dụng tùy chọn
{ name: { $in: [ /^acme/i, /^ack/ ] } }
6 thực hiện phù hợp không phân biệt chữ hoa chữ thường cho các tài liệu có giá trị db.products.find( { sku: { $regex: /789$/ } } )
5 bắt đầu bằng db.products.find( { sku: { $regex: /789$/ } } )
9.{ : /pattern/ }
4Ví dụ đầu ra:
{ : /pattern/ }
3Ví dụ sau đây sử dụng tùy chọn
{ name: { $in: [ /^acme/i, /^ack/ ] } }
6 thực hiện phù hợp không phân biệt chữ hoa chữ thường cho các tài liệu có giá trị db.products.find( { sku: { $regex: /789$/ } } )
5 bắt đầu bằng db.products.find( { sku: { $regex: /789$/ } } )
9.{ : /pattern/ }
6Ví dụ sau sử dụng tùy chọn
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
4 để khớp các dòng bắt đầu với chữ cái { : /pattern/ }
01 cho các chuỗi đa dòng:{ name: { $in: [ /^acme/i, /^ack/ ] } }
8 pattern does not contain an anchor, the pattern matches against the string as a whole, as in the following example:{ : /pattern/ }
7Ví dụ đầu ra:
{ : /pattern/ }
3Ví dụ sau đây sử dụng tùy chọn
{ name: { $in: [ /^acme/i, /^ack/ ] } }
6 thực hiện phù hợp không phân biệt chữ hoa chữ thường cho các tài liệu có giá trị db.products.find( { sku: { $regex: /789$/ } } )
5 bắt đầu bằng db.products.find( { sku: { $regex: /789$/ } } )
9.{ : /pattern/ }
9Ví dụ đầu ra:
{ name: { $in: [ /^acme/i, /^ack/ ] } }
0Ví dụ sau đây sử dụng tùy chọn
{ name: { $in: [ /^acme/i, /^ack/ ] } }
6 thực hiện phù hợp không phân biệt chữ hoa chữ thường cho các tài liệu có giá trị db.products.find( { sku: { $regex: /789$/ } } )
5 bắt đầu bằng db.products.find( { sku: { $regex: /789$/ } } )
9.{ name: { $in: [ /^acme/i, /^ack/ ] } }
1Ví dụ sau sử dụng tùy chọn
{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } } { name: { $regex: /acme.*corp/, $options: 'i', $nin: [ 'acmeblahcorp' ] } } { name: { $regex: 'acme.*corp', $options: 'i', $nin: [ 'acmeblahcorp' ] } }
4 để khớp các dòng bắt đầu với chữ cái { : /pattern/ }
01 cho các chuỗi đa dòng:{ name: { $in: [ /^acme/i, /^ack/ ] } }
2Ví dụ đầu ra:
{ name: { $in: [ /^acme/i, /^ack/ ] } }
3Ví dụ sau đây sử dụng tùy chọn
{ name: { $in: [ /^acme/i, /^ack/ ] } }
6 thực hiện phù hợp không phân biệt chữ hoa chữ thường cho các tài liệu có giá trị db.products.find( { sku: { $regex: /789$/ } } )
5 bắt đầu bằng db.products.find( { sku: { $regex: /789$/ } } )
9.
13{
: /pattern/ }
14{
: /pattern/ }
{ name: { $in: [ /^acme/i, /^ack/ ] } }
4Ví dụ đầu ra:
{ : /pattern/ }
3