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

Tìm kiếm tên miền trong URL MongoDB với regex case-insensitive

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: Flag i = case-insensitive
  • Khớp "EXAMPLE", "example", "Example", "ExAmPlE"...
  • Dot notation details.WebsiteURL truy 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 + $text search
  • Dùng Atlas Search (full-text search engine)