Dùng regex với flag i (case-insensitive) để tìm domain trong URL bất kể chữ hoa thường.
Dữ liệu mẫu
> db.demo219.insertOne({"details":{"WebsiteURL":"www.EXAMPLE.com"}});
> db.demo219.insertOne({"details":{"WebsiteURL":"www.gmail.com"}});
> db.demo219.insertOne({"details":{"WebsiteURL":"www.example.com"}});
Truy vấn regex /example/i
> db.demo219.find({"details.WebsiteURL": /example/i});
Kết quả (khớp cả EXAMPLE và example)
{ "_id" : ObjectId("5e3e667203d395bdc2134718"), "details" : { "WebsiteURL" : "www.EXAMPLE.com" } }
{ "_id" : ObjectId("5e3e667f03d395bdc213471a"), "details" : { "WebsiteURL" : "www.example.com" } }
Giải thích:
/example/i: Flagi= case-insensitive- Khớp "EXAMPLE", "example", "Example", "ExAmPlE"...
- Dot notation
details.WebsiteURLtruy cập trường lồng nhau
Cú pháp thay thế (khi pattern từ biến):
const domain = "example";
db.demo219.find({ "details.WebsiteURL": { $regex: domain, $options: "i" } });
Tối ưu: Regex không prefix (^...) không dùng index. Cân nhắc:
- Tách domain vào trường riêng khi insert
- Dùng Text Index +
$textsearch - Dùng Atlas Search (full-text search engine)