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

Thực hiện MySQL LIKE trong MongoDB với REGEX

MongoDB không có toán tử LIKE như SQL, nhưng cung cấp hỗ trợ mạnh mẽ cho Regular Expression (Regex) thông qua toán tử $regex. Đây là cách tiêu chuẩn để thực hiện tìm kiếm mẫu (pattern matching) tương tự LIKE.

Tạo dữ liệu mẫu

> db.likeInMongoDBDemo.insertOne({"Name" : "Sam"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6922857806ebf1256f123") }
> db.likeInMongoDBDemo.insertOne({"Name" : "John" });
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6923157806ebf1256f124") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Scott"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6924557806ebf1256f125") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Sean"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6924f57806ebf1256f126") }
> db.likeInMongoDBDemo.insertOne({"Name" : "Samuel"});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd6925857806ebf1256f127") }

Xem dữ liệu

> db.likeInMongoDBDemo.find().pretty();

Tìm kiếm với $regex (tương đương LIKE '%Sam%')

> db.likeInMongoDBDemo.find({"Name": {$regex: "Sam"}});

Kết quả


So sánh LIKE SQL vs MongoDB $regex

SQL LIKEMongoDB $regexÝ nghĩa
LIKE 'Sam%'{$regex: '^Sam'}Bắt đầu bằng "Sam"
LIKE '%Sam'{$regex: 'Sam$'}Kết thúc bằng "Sam"
LIKE '%Sam%'{$regex: 'Sam'}Chứa "Sam" ở bất kỳ vị trí
LIKE '_am'{$regex: '^.am'}3 ký tự, kết thúc bằng "am"
LIKE '[A-C]am'{$regex: '^[A-C]am'}Bắt đầu bằng A/B/C, tiếp theo "am"

Các tùy chọn Regex quan trọng


Hiệu năng và Index

  • Prefix regex (^pattern): Có thể sử dụng index
  • Contains regex (pattern hoặc .*pattern): Không dùng được index, quét toàn bộ collection
  • Với dữ liệu lớn, cân nhắc Text Index + $text search

Text Search (MongoDB 2.6+) - Thay thế cho LIKE phức tạp

// Tạo text index
db.likeInMongoDBDemo.createIndex({Name: "text"});

// Tìm kiếm full-text
db.likeInMongoDBDemo.find({$text: {$search: "Sam"}});

Lưu ý

  • Regex phân biệt chữ hoa/thường mặc định (trừ khi dùng $options: "i")
  • Ký tự đặc biệt trong regex: .*+?^${}()|[]\ cần escape nếu tìm kiếm chuỗi cố định
  • MongoDB dùng engine PCRE (Perl Compatible Regular Expressions)