Toán tử $push cho phép thêm một hoặc nhiều phần tử vào cuối mảng. Khi mảng chứa các tài liệu nhúng (embedded documents), bạn có thể đẩy cả đối tượng hoàn chỉnh vào mảng đó.
Tạo collection với mảng nhúng
> db.demo288.insertOne({"Name":"Chris",details:[{"CountryName":"US","Marks":78},{"CountryName":"UK","Marks":68}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e4c0393f49383b52759cbbe") }
Xem dữ liệu ban đầu
> db.demo288.find();
{ "_id" : ObjectId("5e4c0393f49383b52759cbbe"), "Name" : "Chris", "details" : [ { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 68 } ] }
Thêm tài liệu mới vào mảng details
> db.demo288.update( {Name: "Chris"}, {$push:{ "details":{"CountryName" : "AUS", "Marks" : 98} }}, {upsert:true});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Kết quả sau cập nhật
> db.demo288.find();
{ "_id" : ObjectId("5e4c0393f49383b52759cbbe"), "Name" : "Chris", "details" : [ { "CountryName" : "US", "Marks" : 78 }, { "CountryName" : "UK", "Marks" : 68 }, { "CountryName" : "AUS", "Marks" : 98 } ] }
Giải thích: Câu lệnh update với $push thêm đối tượng {"CountryName": "AUS", "Marks": 98} vào cuối mảng details. Tùy chọn upsert:true sẽ tạo tài liệu mới nếu không tìm thấy Name: "Chris". Từ MongoDB 3.2+, khuyến nghị dùng updateOne hoặc updateMany thay cho update.