MongoDB không có toán tử LIKE như SQL, nhưng cung cấp hỗ trợ mạnh mẽ cho Regular Expression (Regex) thông qua toán tử $regex. Đây là cách tiêu chuẩn để thực hiện tìm kiếm mẫu (pattern matching) tương tự LIKE.
Tạo dữ liệu mẫu
> db.likeInMongoDBDemo.insertOne({"Name" : "Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6922857806ebf1256f123") }
> db.likeInMongoDBDemo.insertOne({"Name" : "John" });
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6923157806ebf1256f124") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Scott"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6924557806ebf1256f125") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Sean"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6924f57806ebf1256f126") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Samuel"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6925857806ebf1256f127") }
Xem dữ liệu
> db.likeInMongoDBDemo.find().pretty();
Tìm kiếm với $regex (tương đương LIKE '%Sam%')
> db.likeInMongoDBDemo.find({"Name": {$regex: "Sam"}});Kết quả
So sánh LIKE SQL vs MongoDB $regex
| SQL LIKE | MongoDB $regex | Ý nghĩa |
|---|---|---|
LIKE 'Sam%' | {$regex: '^Sam'} | Bắt đầu bằng "Sam" |
LIKE '%Sam' | {$regex: 'Sam$'} | Kết thúc bằng "Sam" |
LIKE '%Sam%' | {$regex: 'Sam'} | Chứa "Sam" ở bất kỳ vị trí |
LIKE '_am' | {$regex: '^.am'} | 3 ký tự, kết thúc bằng "am" |
LIKE '[A-C]am' | {$regex: '^[A-C]am'} | Bắt đầu bằng A/B/C, tiếp theo "am" |
Các tùy chọn Regex quan trọng
Hiệu năng và Index
- Prefix regex (
^pattern): Có thể sử dụng index - Contains regex (
patternhoặc.*pattern): Không dùng được index, quét toàn bộ collection - Với dữ liệu lớn, cân nhắc Text Index +
$textsearch
Text Search (MongoDB 2.6+) - Thay thế cho LIKE phức tạp
// Tạo text index
db.likeInMongoDBDemo.createIndex({Name: "text"});
// Tìm kiếm full-text
db.likeInMongoDBDemo.find({$text: {$search: "Sam"}});
Lưu ý
- Regex phân biệt chữ hoa/thường mặc định (trừ khi dùng
$options: "i") - Ký tự đặc biệt trong regex:
.*+?^${}()|[]\cần escape nếu tìm kiếm chuỗi cố định - MongoDB dùng engine PCRE (Perl Compatible Regular Expressions)