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

MongoDB findOneAndUpdate() - Cập nhật 1 document duy nhất

Giới thiệu

findOneAndUpdate() là phương pháp cập nhật **chỉ 1 document duy nhất** khớp với filter, trả về document trước hoặc sau khi cập nhật. Khác với updateOne() chỉ trả về WriteResult.

Ví dụ minh họa

1. Tạo collection

> db.demo349.insertOne({"Name":"Chris","Marks":56});
> db.demo349.insertOne({"Name":"David","Marks":78});
> db.demo349.insertOne({"Name":"Chris","Marks":89});
> db.demo349.insertOne({"Name":"David","Marks":54});

2. Xem dữ liệu ban đầu

> db.demo349.find();
{ "_id" : ObjectId("5e55384af8647eb59e5620b4"), "Name" : "Chris", "Marks" : 56 }
{ "_id" : ObjectId("5e553853f8647eb59e5620b5"), "Name" : "David", "Marks" : 78 }
{ "_id" : ObjectId("5e55385af8647eb59e5620b6"), "Name" : "Chris", "Marks" : 89 }
{ "_id" : ObjectId("5e55385ff8647eb59e5620b7"), "Name" : "David", "Marks" : 54 }

3. Cập nhật 1 document: tăng Marks 10 cho Name="David" (document đầu tiên khớp)

> db.demo349.findOneAndUpdate(
  {"Name": "David"},
  {$inc: {Marks: 10}}
);
{ "_id" : ObjectId("5e553853f8647eb59e5620b5"), "Name" : "David", "Marks" : 78 }

Trả về document **TRƯỚC KHI** cập nhật (mặc định). Document đầu tiên Name="David" (_id ...38b5) có Marks 78.

4. Kiểm tra sau cập nhật

> db.demo349.find();
{ "_id" : ..., "Name" : "Chris", "Marks" : 56 }
{ "_id" : ..., "Name" : "David", "Marks" : 88 }  <-- Đã cập nhật 78→88
{ "_id" : ..., "Name" : "Chris", "Marks" : 89 }
{ "_id" : ..., "Name" : "David", "Marks" : 54 }

Tùy chọn quan trọng

  • returnDocument: "after": Trả về document **SAU KHI** cập nhật.
  • sort: Sắp xếp trước khi chọn document (ví dụ: sort: {_id: 1} lấy document cũ nhất).
  • upsert: true: Tạo document mới nếu không tìm thấy khớp.
  • projection: Chỉ trả về các trường cần thiết.

So sánh

Phương thứcTrả vềSố document cập nhật
findOneAndUpdateDocument (trước/sau)1
updateOneWriteResult1
updateManyWriteResultNhiều