Để 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ĩa | Ví dụ khớp |
|---|---|---|
^John | Bắt đầu bằng "John" | John Smith, John Doe |
Smith$ | Kết thúc bằng "Smith" | John Smith, Larry Smith |
Jo.n | Khớp "John", "Joan", "Jonn"... | John, Joan |
John|Mike | Khớ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.