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

Cách tìm tài liệu có giá trị kết thúc bằng ký tự cụ thể trong MongoDB

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ĩaVí 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/iKhông phân biệt chữ hoa/thườngus, 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