Để tìm chuỗi chứa ký tự đặc biệt (như $, ., *...), cần escape ký tự đó bằng \ trong regex.
Ví dụ: Collection searchDocumentWithSpecialCharactersDemo có trường UserId chứa ký tự $:
> db.searchDocumentWithSpecialCharactersDemo.insertOne({"UserId":"Smith$John123","UserFirstName":"John","UserLastName":"Smith"});
> db.searchDocumentWithSpecialCharactersDemo.insertOne({"UserId":"Taylor$Carol983","UserFirstName":"Carol","UserLastName":"Taylor"});
> db.searchDocumentWithSpecialCharactersDemo.insertOne({"UserId":"Doe$John999","UserFirstName":"John","UserLastName":"Doe"});
> db.searchDocumentWithSpecialCharactersDemo.insertOne({"UserId":"Miller$David555","UserFirstName":"David","UserLastName":"Miller"});
Xem dữ liệu:
> db.searchDocumentWithSpecialCharactersDemo.find().pretty();
Tìm chuỗi "John" đi kèm ký tự $ (escape bằng \):
> db.searchDocumentWithSpecialCharactersDemo.find({
UserId: /.*\$John.*/i
}).pretty();
Kết quả:
{ "_id" : ObjectId(...), "UserId" : "Smith$John123", "UserFirstName" : "John", "UserLastName" : "Smith" }
{ "_id" : ObjectId(...), "UserId" : "Doe$John999", "UserFirstName" : "John", "UserLastName" : "Doe" }
Giải thích:
/.*\$John.*/i: Regex không phân biệt chữ hoa/thường (i), tìm chuỗi chứa$John.\$: Escape ký tự$(nghĩa đặc biệt trong regex là "kết thúc chuỗi").
Lưu ý: Các ký tự đặc biệt khác cũng cần escape: \\, \., \*, \+, \?, \^, \$, \{, \}, \[, \], \(, \), \|.