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

Cách nhanh nhất cập nhật toàn bộ tài liệu (tất cả trường) trong MongoDB

Cập nhật toàn bộ tài liệu với replaceOne()

Cách nhanh nhất để thay thế toàn bộ tài liệu (giữ nguyên _id) là sử dụng replaceOne() thay vì updateOne() với nhiều $set.

1. Dữ liệu mẫu

> db.demo431.insertOne({ "Name": "Chris", "Age": 32 });
{ "acknowledged": true, "insertedId": ObjectId("5e770ba6bbc41e36cc3cae89") }

> db.demo431.insertOne({ "Name": "David", "Age": 31 });
{ "acknowledged": true, "insertedId": ObjectId("5e770bacbbc41e36cc3cae8a") }

> db.demo431.insertOne({ "Name": "John", "Age": 24 });
{ "acknowledged": true, "insertedId": ObjectId("5e770bb3bbc41e36cc3cae8b") }

> db.demo431.insertOne({ "Name": "Bob", "Age": 22 });
{ "acknowledged": true, "insertedId": ObjectId("5e770bb8bbc41e36cc3cae8c") }

2. Thay thế tài liệu có Name = "John"

> db.demo431.replaceOne(
    { "Name": "John" },
    { "Name": "Robert", "Age": 45 }
);
{ "acknowledged": true, "matchedCount": 1, "modifiedCount": 1 }

3. Kết quả sau cập nhật

> db.demo431.find();
{ "_id": ObjectId("5e770ba6bbc41e36cc3cae89"), "Name": "Chris", "Age": 32 }
{ "_id": ObjectId("5e770bacbbc41e36cc3cae8a"), "Name": "David", "Age": 31 }
{ "_id": ObjectId("5e770bb3bbc41e36cc3cae8b"), "Name": "Robert", "Age": 45 }
{ "_id": ObjectId("5e770bb8bbc41e36cc3cae8c"), "Name": "Bob", "Age": 22 }

So sánh replaceOne vs updateOne

Đặc điểmreplaceOne()updateOne() + $set
Thay thế toàn bộ doc✅ Có❌ Chỉ cập nhật trường chỉ định
Giữ _id✅ Có✅ Có
Xóa trường không có trong doc mới✅ Có❌ Giữ nguyên
Hiệu suấtNhanh hơn cho doc lớnChậm hơn nếu nhiều trường

Lưu ý: replaceOne sẽ xóa hoàn toàn các trường không có trong tài liệu mới. Hãy chắc chắn bạn muốn thay thế hoàn toàn.