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

Xóa khoảng trắng đầu và cuối chuỗi trong MongoDB

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

  1. find({}, {"Title": 1}): Lấy tất cả tài liệu, chỉ chọn trường Title (và _id mặc định)
  2. forEach(): Duyệt từng tài liệu
  3. .trim(): Phương thức JavaScript xóa khoảng trắng đầu/cuối
  4. update() với $set: Cập nhật lại trường Title

Cá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.