MongoDB không có hàm built-in để trim khoảng trắng trực tiếp trong truy vấn cập nhật. Cách phổ biến là sử dụng forEach() duyệt qua các tài liệu, áp dụng JavaScript .trim(), sau đó cập nhật lại bằng $set.
Tạo dữ liệu mẫu
> db.removingWhiteSpaceDemo.insertOne({"Title":" Introduction to java "});
{ "acknowledged" : true, "insertedId" : ObjectId("5cd66f387924bb85b3f4894c") }
Xem dữ liệu (có khoảng trắng)
> db.removingWhiteSpaceDemo.find();
Xóa khoảng trắng đầu và cuối
> db.removingWhiteSpaceDemo.find({}, {"Title": 1 }).forEach(function(myDocument) { myDocument.Title = myDocument.Title.trim(); db.removingWhiteSpaceDemo.update( { "_id": myDocument._id }, { "$set": { "Title": myDocument.Title } } ); });Kết quả sau khi trim
> db.removingWhiteSpaceDemo.find();Giải thích quy trình
find({}, {"Title": 1}): Lấy tất cả tài liệu, chỉ chọn trường Title (và _id mặc định)forEach(): Duyệt từng tài liệu.trim(): Phương thức JavaScript xóa khoảng trắng đầu/cuốiupdate()với$set: Cập nhật lại trường TitleCách hiện đại hơn (MongoDB 4.2+)
Sử dụng Aggregation Pipeline trong
updateMany()với$trim:db.removingWhiteSpaceDemo.updateMany( {}, [{ $set: { Title: { $trim: { input: "$Title" } } } }] );Các biến thể $trim
{$trim: {input: "$field"}}: Xóa cả đầu và cuối (mặc định){$trim: {input: "$field", chars: " "}}: Chỉ định ký tự cần xóa$ltrim,$rtrim: Chỉ xóa đầu hoặc chỉ xóa cuối
Lưu ý hiệu năng
Với collection lớn, cách forEach có thể chậm do thực hiện nhiều round-trip. Cách Aggregation Pipeline (MongoDB 4.2+) hiệu quả hơn đáng kể vì thực hiện phía server.