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

Cập nhật giá trị khóa trong mảng JSON MongoDB

Để cập nhật giá trị của khóa trong mảng đối tượng, cần: lấy tài liệu -> duyệt mảng sửa đổi -> lưu lại toàn bộ mảng.

Ví dụ: Collection updateListOfKeyValuesDemo:

> db.updateListOfKeyValuesDemo.insertOne({
    "StudentDetails": [
        { "StudentName": "John", "StudentAge": 23, "StudentCountryName": "US" },
        { "StudentName": "Carol", "StudentAge": 24, "StudentCountryName": "UK" },
        { "StudentName": "Bob", "StudentAge": 22, "StudentCountryName": "AUS" }
    ]
});

Cập nhật tất cả StudentName thành "Ramit":

> var doc = db.updateListOfKeyValuesDemo.findOne({ "_id": ObjectId("5c9b5b759882024390176545") });
> doc.StudentDetails.forEach(function(s) { s.StudentName = "Ramit"; });
> db.updateListOfKeyValuesDemo.update(
    { "_id": doc._id },
    { $set: { "StudentDetails": doc.StudentDetails } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })

Kết quả: Tất cả 3 phần tử trong mảng StudentDetails giờ có StudentName = "Ramit".

Lưu ý:

  • Cách này tải toàn bộ tài liệu về client, sửa, ghi đè lại (replace array).
  • MongoDB 3.6+: Dùng arrayFilters với $[elem] để cập nhật trực tiếp trên server mà không tải toàn bộ mảng.
  • Ví dụ arrayFilters: db.coll.updateMany({}, { $set: { "StudentDetails.$[elem].StudentName": "Ramit" } }, { arrayFilters: [{ "elem.StudentName": { $exists: true } }] })