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ư Show
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)
Tuy nhiên, những điều này không
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
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
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ẫuToá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 db.Employee.find({EmployeeName : {$regex: "Gu" }}).forEach(printjson) Giải thích mã
Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị đầu ra Đầ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ên22NewMartin2Mohan3Joe4MohanR100Guru996Gurang8Guru999Ví dụ sau đây cho thấy làm thế nào điều này có thể được thực hiện db.Employee.find({EmployeeName : {$regex: "^Guru99$"}}).forEach(printjson) Giải thích mã
Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị đầu ra Ở đầu ra, có thể thấy rõ rằng chuỗi “Guru99” được tìm nạp Khớp mẫu với $optionsKhi 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ên22NewMartin2Mohan3Joe4MohanR100Guru996Gurang7GURU99Bâ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” db.Employee.find({EmployeeName:{$regex: "Gu",$options:'i'}}).forEach(printjson) Giải thích mã
Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị đầu ra
Khớp mẫu mà không có toán tử regexNgườ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 db.Employee.find({EmployeeName: /Gu/'}).forEach(printjson) Giải thích mã
Nếu lệnh được thực hiện thành công, Kết quả sau sẽ được hiển thị đầu ra Đầ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ậpCó 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________số 8Giả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 Đầ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. |