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

Thêm phần tử mảng mới vào document MongoDB

Để thêm trường mới vào object bên trong mảng, dùng positional operator $ kết hợp $set trong update.

Dữ liệu mẫu

> db.demo222.insertOne({"details":[{ "StudentName":"Chris","StudentMarks":78 },{ "StudentName":"David","StudentMarks":89 }]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e3ee31703d395bdc213472f") }

Thêm SubjectName cho Chris

> db.demo222.update(
    {"details.StudentName" : "Chris"},
    {"$set" : {"details.$.SubjectName":"MongoDB"}}
);
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Kết quả

{ "_id" : ObjectId("5e3ee31703d395bdc213472f"), "details" : [ { "StudentName" : "Chris", "StudentMarks" : 78, "SubjectName" : "MongoDB" }, { "StudentName" : "David", "StudentMarks" : 89 } ] }

Giải thích:

  • {"details.StudentName": "Chris"}: Tìm document có phần tử StudentName="Chris"
  • details.$.SubjectName: $ trỏ đến phần tử đầu tiên khớp trong mảng
  • $set: Thêm trường mới SubjectName vào object đó

Lưu ý:

  • Chỉ cập nhật 1 phần tử đầu tiên khớp
  • Nếu cần cập nhật tất cả phần tử khớp, dùng arrayFilters (MongoDB 3.6+): {$set: {"details.$[elem].SubjectName": "MongoDB"}}, {arrayFilters: [{"elem.StudentName": "Chris"}]}
  • Để thêm phần tử mới vào mảng (push), dùng $push: {$push: {details: {StudentName: "New", StudentMarks: 100}}}