Giới thiệu
Để tìm các tài liệu mà giá trị của một trường kết thúc bằng một ký tự hoặc chuỗi cụ thể, bạn sử dụng toán tử $regex với ký tự $ (anchor kết thúc chuỗi) trong biểu thức chính quy.
Cú pháp
db.tenCollection.find({ tenTruong: { $regex: "kyTuKetThuc$" } }).pretty();
Ví dụ minh họa
1. Tạo collection dữ liệu quốc gia
> db.timKetThucKyTu.insertOne({"TenSinhVien":"Adam","TuoiSinhVien":25,"QuocGia":"LAOS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c45b32d66697741252456") }
> db.timKetThucKyTu.insertOne({"TenSinhVien":"Sam","TuoiSinhVien":24,"QuocGia":"ANGOLA"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c45c02d66697741252457") }
> db.timKetThucKyTu.insertOne({"TenSinhVien":"Robert","TuoiSinhVien":21,"QuocGia":"AUS"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c45cb2d66697741252458") }
> db.timKetThucKyTu.insertOne({"TenSinhVien":"Chris","TuoiSinhVien":20,"QuocGia":"UK"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c45d92d66697741252459") }
> db.timKetThucKyTu.insertOne({"TenSinhVien":"Larry","TuoiSinhVien":23,"QuocGia":"US"});
{ "acknowledged" : true, "insertedId" : ObjectId("5c9c45eb2d6669774125245a") }
2. Tìm quốc gia kết thúc bằng chữ 'S'
> db.timKetThucKyTu.find({QuocGia: {$regex: "S$"}}).pretty();
3. Kết quả
{ "_id" : ObjectId("5c9c45b32d66697741252456"), "TenSinhVien" : "Adam", "TuoiSinhVien" : 25, "QuocGia" : "LAOS" }
{ "_id" : ObjectId("5c9c45cb2d66697741252458"), "TenSinhVien" : "Robert", "TuoiSinhVien" : 21, "QuocGia" : "AUS" }
{ "_id" : ObjectId("5c9c45eb2d6669774125245a"), "TenSinhVien" : "Larry", "TuoiSinhVien" : 23, "QuocGia" : "US" }
Mở rộng: Các pattern regex hữu ích khác
| Pattern | Ý nghĩa | Ví dụ khớp |
|---|---|---|
"^A" | Bắt đầu bằng 'A' | AUS, ANGOLA |
"S$" | Kết thúc bằng 'S' | LAOS, AUS, US |
"^A.*S$" | Bắt đầu bằng 'A' và kết thúc bằng 'S' | AUS |
/pattern/i | Không phân biệt chữ hoa/thường | us, US, Us |
Lưu ý hiệu suất
- Regex không sử dụng index (trừ khi là prefix regex như
^prefix) - Với dataset lớn, cân nhắc tạo trường phụ đã chuẩn hóa hoặc dùng text search
- Sử dụng
{ $regex: "pattern", $options: "i" }cho case-insensitive