Sử dụng findOneAndUpdate() để cập nhật một tài liệu đơn dựa trên bộ lọc và sắp xếp. Kết hợp với toán tử vị trí $ để cập nhật phần tử khớp trong mảng.
Tạo collection với mảng midExamDetails chứa các object:
> db.demo553.insertOne(
... {
... id:101,
... "Name":"John",
... midExamDetails:
... [
... {"SubjectName":"MySQL","Marks":70},
... {"SubjectName":"MongoDB","Marks":35}
... ]
... }
... );
{ "acknowledged" : true, "insertedId" : ObjectId("5e8e3da19e5f92834d7f05ed") }
Hiển thị tài liệu:
> db.demo553.find();
Kết quả:
{ "_id" : ObjectId("5e8e3da19e5f92834d7f05ed"), "id" : 101, "Name" : "John", "midExamDetails" : [ { "SubjectName" : "MySQL", "Marks" : 70 }, { "SubjectName" : "MongoDB", "Marks" : 35 } ] }
Cập nhật Marks của môn "MongoDB" từ 35 thành 97 (sử dụng positional $):
> db.demo553.findOneAndUpdate(
... { id:101, "midExamDetails.SubjectName":"MongoDB" },
... { $set:{ 'midExamDetails.$.Marks': 97 } }
... );
{ "_id" : ObjectId("5e8e3da19e5f92834d7f05ed"), "id" : 101, "Name" : "John", "midExamDetails" : [ { "SubjectName" : "MySQL", "Marks" : 70 }, { "SubjectName" : "MongoDB", "Marks" : 35 } ] }
Lưu ý: findOneAndUpdate trả về tài liệu trước khi cập nhật. Kiểm tra lại:
> db.demo553.find().pretty();
Kết quả (đã cập nhật):
{
"_id" : ObjectId("5e8e3da19e5f92834d7f05ed"),
"id" : 101,
"Name" : "John",
"midExamDetails" : [
{ "SubjectName" : "MySQL", "Marks" : 70 },
{ "SubjectName" : "MongoDB", "Marks" : 97 }
]
}