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

Cú pháp MongoDB cập nhật đối tượng bên trong mảng trong tài liệu

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 }
    ]
}