MongoDB regex nhiều giá trị

Tôi đang thiết lập một db mongoDB để cho phép tìm kiếm từ khóa (đơn giản) bằng cách sử dụng nhiều phím như được đề xuất tại đây. Một bản ghi trông giống như

{ title: { title: "A river runs through", _keywords: ["a","river","runs","through"] ) , .. }

Tôi đang sử dụng phía máy chủ của nodejs, vì vậy tôi đang sử dụng javascript. Truy vấn sau sẽ khớp (điều này đã được chạy trong thiết bị đầu cuối mongo)

> db.torrents_sorted.find({'title._keywords' : {"$all" : ["river","the"]} }).count()
210

Tuy nhiên, những điều này không

> db.torrents_sorted.find({'title._keywords' : {"$all" : ["/river/i","/the/i"]} }).count()
0

> db.torrents_sorted.find({'title._keywords' : {"$all" : [{ "$regex" : "river", "$options" : "i" },{ "$regex" : "the", "$options" : "i" }]} }).count()
0

Sử dụng một biểu thức chính quy duy nhất (không sử dụng $and hoặc $all) không phù hợp

db. torrents_sorted. tìm ({'tiêu đề. _từ khóa'. { "$regex". "sông", "$options". "tôi" } }). đếm() 1461

Thật thú vị, sử dụng python và pymongo để biên dịch các biểu thức chính quy hoạt động

>>> db.torrents_sorted.find({'title._keywords': { '$all': [re.compile('river'), re.compile('the')]}}).count();
236

Tôi không nhất thiết phải tìm kiếm một giải pháp sử dụng biểu thức chính quy, tuy nhiên, các từ khóa phải được khớp trên các chuỗi ngắn hơn để "riv" khớp với "sông", có vẻ lý tưởng cho biểu thức chính quy (hoặc THÍCH trong sql)

Ý tưởng tiếp theo của tôi là thử chuyển vào một hàm javascript thực hiện khớp biểu thức chính quy trong danh sách hoặc có thể chuyển vào một hàm riêng biệt cho mỗi biểu thức chính quy (điều này dường như khiến tôi hét lên. ), mặc dù tôi đoán điều này sẽ chậm hơn và hiệu suất là rất quan trọng

Các biểu thức chính quy được sử dụng để khớp mẫu, về cơ bản là cho các chuỗi tìm kiếm trong tài liệu

Đôi khi khi truy xuất tài liệu trong một bộ sưu tập, bạn có thể không biết chính xác giá trị Trường chính xác cần tìm kiếm là gì. Do đó, người ta có thể sử dụng các biểu thức chính quy để hỗ trợ truy xuất dữ liệu dựa trên các giá trị tìm kiếm khớp với mẫu

Trong hướng dẫn này, bạn sẽ học –

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

Toán tử regex trong MongoDB được sử dụng để tìm kiếm các chuỗi cụ thể trong bộ sưu tập. Ví dụ sau đây cho thấy làm thế nào điều này có thể được thực hiện

Giả sử rằng chúng ta có cùng một bộ sưu tập Nhân viên có tên Trường là “Employeeid” và “EmployeeName”. Giả sử rằng chúng tôi 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ên22NewMartin2Mohan3Joe4MohanR100Guru996Gurang

Ở đây trong đoạn mã dưới đây, chúng tôi đã sử dụng toán tử regex để chỉ định tiêu chí tìm kiếm

MongoDB regex nhiều giá trị

db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson)

Giải thích mã

  1. Ở đây chúng tôi muốn tìm tất cả các Tên nhân viên có ký tự 'Gu' trong đó. Do đó, chúng tôi chỉ định toán tử $regex để xác định tiêu chí tìm kiếm của 'Gu'
  2. printjson đang đượ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 lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị

đầu ra

MongoDB regex nhiều giá trị

Đầu ra cho thấy rõ ràng rằng những tài liệu trong đó Tên nhân viên chứa các ký tự 'Gu' được trả về

Nếu giả sử bộ sưu tập của bạn có các tài liệu sau với một tài liệu bổ sung có tên Nhân viên là “Guru999”. Nếu bạn nhập tiêu chí tìm kiếm là “Guru99”, nó cũng sẽ trả về tài liệu có “Guru999”. Nhưng giả sử 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 với “Guru99”. Sau đó, chúng tôi có thể làm điều này với 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ẽ sử dụng ký tự ^ và $. Chúng ta sẽ thêm ký tự ^ vào đầu chuỗi và ký tự $ vào cuối chuỗi

Id nhân viênTên nhân viên22NewMartin2Mohan3Joe4MohanR100Guru996Gurang8Guru999

Ví dụ sau đây cho thấy làm thế nào điều này có thể được thực hiện

MongoDB regex nhiều giá trị

db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson)  

Giải thích mã

  1. Ở đây trong tiêu chí tìm kiếm, chúng tôi đang sử dụng ký tự ^ và $. ^ được sử dụng để đảm bảo rằng chuỗi bắt đầu bằng một ký tự nhất định và $ được sử dụng để đảm bảo rằng chuỗi kết thúc bằng một ký tự nhất định. Vì vậy, khi mã thực thi, nó sẽ chỉ lấy chuỗi có tên “Guru99”
  2. printjson đang đượ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 lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị

đầu ra

MongoDB regex nhiều giá trị

Ở đầu ra, có thể thấy rõ rằng chuỗi “Guru99” được tìm nạp

Khớp mẫu với $options

Khi sử dụng toán tử regex, người ta cũng có thể cung cấp các tùy chọn bổ sung bằng cách sử dụng từ khóa $options. Ví dụ: giả sử bạn muốn tìm tất cả các tài liệu có 'Gu' trong Tên nhân viên của họ, 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. Nếu muốn có kết quả như vậy, thì chúng ta cần sử dụng tùy chọn $ với tham số phân biệt chữ hoa chữ thường

Ví dụ sau đây cho thấy làm thế nào điều này có thể được thực hiện

Giả sử rằng chúng ta có cùng một bộ sưu tập Nhân viên có tên Trường là “Employeeid” và “EmployeeName”

Giả sử rằng chúng tôi 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ên22NewMartin2Mohan3Joe4MohanR100Guru996Gurang7GURU99

Bây giờ nếu chúng tôi chạy cùng một truy vấn như trong chủ đề trước, chúng tôi sẽ không bao giờ thấy tài liệu có “GURU99” trong kết quả. Để đảm bảo điều này xuất hiện trong tập kết quả, chúng ta cần thêm tham số $options “I”

MongoDB regex nhiều giá trị

db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson) 

Giải thích mã

  1. Tùy chọn $ với tham số 'I' (có nghĩa là không phân biệt chữ hoa chữ thường) chỉ định rằng chúng tôi muốn thực hiện 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

Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị

đầu ra

MongoDB regex nhiều giá trị

  1. Đầu ra cho thấy rõ ràng rằng mặc dù một tài liệu có chữ hoa 'Gu', tài liệu vẫn được hiển thị trong tập hợp kết quả

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

Người ta cũng có thể thực hiện khớp mẫu mà không cần toán tử regex. Ví dụ sau đây cho thấy làm thế nào điều này có thể được thực hiện

MongoDB regex nhiều giá trị

db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson)

Giải thích mã

  1. Các tùy chọn “//” về cơ bản có nghĩa là chỉ định tiêu chí tìm kiếm của bạn trong các dấu phân cách này. Do đó, chúng tôi đang chỉ định /Gu/ để tìm lại những tài liệu có 'Gu' trong Tên nhân viên của họ

Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị

đầu ra

MongoDB regex nhiều giá trị

Đầu ra cho thấy rõ ràng rằng những tài liệu trong đó Tên nhân viên chứa các ký tự 'Gu' được trả về

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 trong một bộ sưu tập

Hãy xem xét một trong những cách thông qua các bước sau

Ví dụ sau đây cho thấy làm thế nào điều này có thể được thực hiện

Giả sử rằng chúng ta có cùng một bộ sưu tập Nhân viên có tên Trường là “Employeeid” và “EmployeeName”

Giả sử rằng chúng tôi 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ên22NewMartin2Mohan3Joe4MohanR100Guru996Gurang7GURU99

MongoDB regex nhiều giá trị

________số 8

Giải thích mã

1) Khi truy vấn tài liệu, hãy sử dụng chức năng sắp xếp để sắp xếp các bản ghi theo thứ tự đảo ngược dựa trên giá trị trường _id trong bộ sưu tập. -1 về cơ bản cho biết sắp xếp tài liệu theo thứ tự đảo ngược hoặc thứ tự giảm dần để tài liệu cuối cùng trở thành tài liệu đầu tiên được hiển thị

2) Sau đó, sử dụng mệnh đề giới hạn để chỉ hiển thị số lượng bản ghi bạn muốn. Ở đây chúng tôi đã đặt mệnh đề giới hạn (2), vì vậy nó sẽ tìm nạp hai tài liệu cuối cùng

Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị

đầu ra

MongoDB regex nhiều giá trị

Đầu ra hiển thị rõ ràng rằng hai tài liệu cuối cùng trong bộ sưu tập được hiển thị. Do đó, chúng tôi đã chỉ ra rõ ràng rằng để tìm nạp 'n' tài liệu cuối cùng trong bộ sưu tập, trước tiên chúng ta có thể sắp xếp các tài liệu theo thứ tự giảm dần và sau đó sử dụng mệnh đề giới hạn để trả về số 'n' tài liệu được yêu cầu

Ghi chú. Nếu tìm kiếm được thực hiện trên một chuỗi lớn hơn 38.000 ký tự, nó sẽ không hiển thị đúng kết quả

Làm cách nào để chuyển nhiều giá trị trong MongoDB?

Cập nhật nhiều trường của một tài liệu. Chúng ta có thể sử dụng toán tử $set và $inc để cập nhật bất kỳ trường nào trong MongoDB . Toán tử $set sẽ đặt giá trị mới được chỉ định trong khi toán tử $inc sẽ tăng giá trị theo một giá trị đã chỉ định.

Làm cách nào để sử dụng regex với MongoDB?

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 để thêm nhiều điều kiện trong MongoDB?

Trong MongoDB, chúng ta có thể áp dụng nhiều điều kiện bằng cách sử dụng toán tử and . Bằng cách áp dụng thao tác và, chúng tôi sẽ chọn tất cả các tài liệu thỏa mãn tất cả các biểu thức điều kiện. Chúng ta có thể sử dụng toán tử này trong các phương thức như find(), update(), v.v. theo yêu cầu.

Làm cách nào để kiểm tra nhiều giá trị trong MongoDB?

MongoDB cung cấp find() được sử dụng để tìm nhiều giá trị hoặc tài liệu từ bộ sưu tập. Phương thức find() trả về một con trỏ của tập kết quả và in tất cả các tài liệu. Để tìm nhiều giá trị, chúng ta có thể sử dụng các thao tác tổng hợp do chính MongoDB cung cấp.