MongoDB sửa đổi dữ liệu với các phương thức (/), (/ với toán tử), và (/). Update dùng các thay vì thay thế toàn bộ document — một điểm phân biệt quan trọng.
MongoDB sửa đổi dữ liệu với các phương thức (/), (/ với toán tử), và (/). Update dùng các thay vì thay thế toàn bộ document — một điểm phân biệt quan trọng.
insertOneinsertManyupdateOneupdateManydeleteOnedeleteManydb.users.insertOne({ name: "Ann", age: 30 }); // → trả về _id đã chèn
db.users.insertMany([{ name: "Bob" }, { name: "Carol" }]); // chèn hàng loạt (hiệu quả)
// updateOne — filter (doc nào) + update (với TOÁN TỬ)
db.users.updateOne(
{ name: "Ann" },
{ $set: { age: 31, status: "active" } } // $set: thay đổi các field cụ thể
);
// các toán tử update thường gặp
{ $set: { field: value } } // đặt/thay đổi một field
{ $unset: { field: "" } } // xóa một field
{ $inc: { count: 1 } } // tăng một số
{ $push: { tags: "new" } } // thêm vào một mảng
{ $pull: { tags: "old" } } // xóa khỏi một mảng
{ $addToSet: { tags: "x" } } // thêm vào mảng chỉ khi chưa có
db.users.updateMany({ active: false }, { $set: { archived: true } }); // cập nhật tất cả khớp
Quan trọng: update dùng các toán tử ($set, $inc, $push, v.v.) để sửa đổi các field cụ thể. Không có toán tử, bạn sẽ thay thế toàn bộ document — một cạm bẫy phổ biến:
// ❌ điều này THAY THẾ toàn bộ document (mất các field khác!)
db.users.updateOne({ name: "Ann" }, { age: 31 }); // Ann giờ chỉ còn age!
// ✅ dùng $set để chỉ thay đổi field đó
db.users.updateOne({ name: "Ann" }, { $set: { age: 31 } });
db.users.deleteOne({ name: "Ann" }); // xóa kết quả khớp đầu tiên
db.users.deleteMany({ active: false }); // xóa tất cả document khớp
db.users.deleteMany({}); // ⚠️ xóa TẤT CẢ document!
db.users.updateOne(
{ email: "[email protected]" },
{ $set: { name: "Ann" } },
{ upsert: true } // nếu không khớp, CHÈN một document mới
);
Các thao tác insert, update, và delete là cách ứng dụng sửa đổi dữ liệu trong MongoDB, nền tảng cho bất kỳ ứng dụng dựa trên dữ liệu nào, nên hiểu chúng là kiến thức thiết yếu hằng ngày.
Biết các phương thức (insertOne/insertMany để tạo, updateOne/updateMany để sửa, deleteOne/deleteMany để xóa) bao quát những điều cơ bản. Điểm quan trọng nhất và hay bị nhầm lẫn nhất là update của MongoDB dùng các toán tử update ($set, $inc, $push, $pull, v.v.) để sửa đổi các field cụ thể — và quan trọng là, quên toán tử sẽ thay thế toàn bộ document (một cạm bẫy khét tiếng nơi updateOne({...}, {age: 31}) xóa sạch tất cả field khác, chỉ còn lại age), nên hiểu việc luôn dùng $set (và các toán tử khác) cho cập nhật cấp field là thiết yếu cho tính đúng đắn.
Biết các toán tử thường gặp ($set, $inc cho bộ đếm, $push/$pull/$addToSet cho mảng — toán tử mảng đặc biệt liên quan xét đến document giàu mảng của MongoDB) là kiến thức hằng ngày quan trọng.
Hiểu upsert ({ upsert: true } — chèn nếu không có kết quả khớp, kiểu chèn-hoặc-cập-nhật của MongoDB) là giá trị cho mẫu chèn-hoặc-cập-nhật phổ biến.
Cũng đáng lưu ý là sự nguy hiểm của deleteMany({}) (xóa mọi thứ — tương tự nguy hiểm của việc thiếu WHERE trong SQL).
Vì sửa đổi dữ liệu là nền tảng, và vì update dựa trên toán tử của MongoDB (với cạm bẫy thay thế document), toán tử mảng, và upsert là cách bạn thay đổi dữ liệu đúng đắn, nên hiểu insert/update/delete — đặc biệt là sự phân biệt toán tử update then chốt (tránh thay thế document ngoài ý muốn) — là kiến thức thiết yếu, phải biết cho mọi phát triển MongoDB, nơi cạm bẫy toán tử nói riêng là một nguồn bug thực tế thường xuyên.