Sử dụng $set với dot notation. Tạo collection:
> db.updateSubObjectDemo.insertOne({
"ClientId": 100,
"ClientDetails": { "ClientFirstName": "Adam" }
});
{ "acknowledged": true, "insertedId": ObjectId("5cd31434b64f4b851c3a13e9") }
Hiển thị tài liệu
> db.updateSubObjectDemo.find().pretty();
Kết quả:
{
"_id": ObjectId("5cd31434b64f4b851c3a13e9"),
"ClientId": 100,
"ClientDetails": { "ClientFirstName": "Adam" }
}
Cập nhật thêm ClientLastName vào sub-object
> db.updateSubObjectDemo.update(
{ ClientId: 100 },
{ $set: { "ClientDetails.ClientLastName": "Smith" } }
);
WriteResult({ "nMatched": 1, "nUpserted": 0, "nModified": 1 })
Kết quả
> db.updateSubObjectDemo.find().pretty();
Kết quả (ClientDetails giờ có cả FirstName và LastName):
{
"_id": ObjectId("5cd31434b64f4b851c3a13e9"),
"ClientId": 100,
"ClientDetails": {
"ClientFirstName": "Adam",
"ClientLastName": "Smith"
}
}
Mẹo: Dùng $set với dot notation để thêm/cập nhật trường sâu mà không ghi đè toàn bộ đối tượng cha.