MongoDB không có toán tử LIKE như SQL, nhưng hỗ trợ Regular Expression (Regex) mạnh mẽ hơn để tìm kiếm mẫu chuỗi.
Tạo dữ liệu mẫu
> db.likeDemo.insertOne({"Name":"John",Age:32});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb84984623186894665ae41") }
> db.likeDemo.insertOne({"Name":"Chris",Age:25});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb84991623186894665ae42") }
> db.likeDemo.insertOne({"Name":"Carol",Age:22});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb849a1623186894665ae43") }
> db.likeDemo.insertOne({"Name":"Johnny",Age:22});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb849b2623186894665ae44") }
> db.likeDemo.insertOne({"Name":"James",Age:27});
{ "acknowledged" : true, "insertedId" : ObjectId("5cb849bb623186894665ae45") }
Hiển thị tất cả:
> db.likeDemo.find().pretty();
Tìm tên bắt đầu bằng "Jo" (tương đương LIKE 'Jo%')
> db.likeDemo.find({Name: /^Jo/i } ).pretty();Kết quả:
So sánh LIKE SQL vs Regex MongoDB
| SQL LIKE | MongoDB Regex | Ý nghĩa |
|---|---|---|
| LIKE 'Jo%' | /^Jo/ hoặc /^Jo/i | Bắt đầu bằng "Jo" |
| LIKE '%hn' | /hn$/ hoặc /hn$/i | Kết thúc bằng "hn" |
| LIKE '%oh% | /oh/ hoặc /oh/i | Chứa "oh" ở bất kỳ vị trí |
| LIKE 'J_hn' | /J.hn/ | J + 1 ký tự bất kỳ + hn |
Flag i: Không phân biệt chữ hoa/thường (case-insensitive). Mặc định regex phân biệt hoa/thường.
Hiệu năng: Regex có anchor ^ (bắt đầu chuỗi) có thể tận dụng index. Regex không có anchor hoặc bắt đầu bằng wildcard .* sẽ quét toàn bộ collection (collection scan).