Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Toán tử $regex trong MongoDB - Tương đương LIKE trong SQL

Để thực hiện tìm kiếm mẫu (pattern matching) tương tự mệnh đề LIKE trong SQL, MongoDB cung cấp toán tử $regex.

Cú pháp cơ bản

db.collection.find({ "trường": { "$regex": "mẫu", "$options": "i" } })
  • "mẫu": Chuỗi regex cần khớp.
  • "$options": "i": Không phân biệt chữ hoa/thường (case-insensitive).

Ví dụ minh họa

Tạo collection sqlLikeDemo với các tài liệu:

> db.sqlLikeDemo.insertOne({"UserName": "John Smith", "UserAge": 24});
> db.sqlLikeDemo.insertOne({"UserName": "John Doe", "UserAge": 21});
> db.sqlLikeDemo.insertOne({"UserName": "Chris Williams", "UserAge": 22});
> db.sqlLikeDemo.insertOne({"UserName": "Robert Taylor", "UserAge": 26});
> db.sqlLikeDemo.insertOne({"UserName": "John Brown", "UserAge": 27});
> db.sqlLikeDemo.insertOne({"UserName": "Mike Brown", "UserAge": 23});
> db.sqlLikeDemo.insertOne({"UserName": "Larry Smith", "UserAge": 24});

Tìm tất cả tài liệu có UserName chứa "John":

> db.sqlLikeDemo.find({ "UserName": { "$regex": "John" } }).pretty();

Kết quả:

{ "_id" : ..., "UserName" : "John Smith", "UserAge" : 24 }
{ "_id" : ..., "UserName" : "John Doe", "UserAge" : 21 }
{ "_id" : ..., "UserName" : "John Brown", "UserAge" : 27 }

Các mẫu regex phổ biến

MẫuÝ nghĩaVí dụ khớp
^JohnBắt đầu bằng "John"John Smith, John Doe
Smith$Kết thúc bằng "Smith"John Smith, Larry Smith
Jo.nKhớp "John", "Joan", "Jonn"...John, Joan
John|MikeKhớp "John" HOẶC "Mike"John Smith, Mike Brown

Lưu ý hiệu suất: Regex không sử dụng index hiệu quả nếu mẫu không phải là prefix (bắt đầu bằng ^). Cân nhắc dùng Text Search cho tìm kiếm toàn văn bản phức tạp.