Toán tử $push thêm phần tử vào cuối mảng. Khi mảng chứa đối tượng (embedded documents), bạn đẩy cả đối tượng đó vào. Kết hợp với updateOne() để cập nhật an toàn.
Dữ liệu mẫu
> db.demo310.insertOne({"Name":"Chris","details":[{"Id":101,"Subject":"MySQL"},{"Id":102,"Subject":"MongoDB"}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5e50cabdf8647eb59e562043") }
Xem dữ liệu
> db.demo310.find();
{ "_id" : ObjectId("5e50cabdf8647eb59e562043"), "Name" : "Chris", "details" : [ { "Id" : 101, "Subject" : "MySQL" }, { "Id" : 102, "Subject" : "MongoDB" } ] }
Thêm đối tượng mới vào mảng details
> db.demo310.update({ _id:ObjectId("5e50cabdf8647eb59e562043")}, { $push: {"details": { "Id" : 103, "Subject": "Java" }} });
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Kết quả
> db.demo310.find();
{ "_id" : ObjectId("5e50cabdf8647eb59e562043"), "Name" : "Chris", "details" : [ { "Id" : 101, "Subject" : "MySQL" }, { "Id" : 102, "Subject" : "MongoDB" }, { "Id" : 103, "Subject" : "Java" } ] }
Mở rộng $push:
$push: {arr: {$each: [val1, val2], $slice: -5, $sort: 1}}– thêm nhiều, giới hạn kích thước, sắp xếp.$addToSet– chỉ thêm nếu giá trị chưa tồn tại (tránh trùng lặp).- Luôn dùng
updateOnehoặcupdateManythay choupdatecũ.