Để thêm phần tử vào mảng lồng nhau, sử dụng updateOne() kết hợp $push và positional operator $ với $elemMatch. Tạo collection:
> db.demo526.insertOne({
"CountryName": "US",
"TeacherName": "Bob",
"StudentInformation": [
{ "Name": "Chris", "Subject": "MySQL", "ListOfMailId": [] },
{ "Name": "David", "Subject": "MongoDB", "ListOfMailId": [] }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e8af031437efc8605595b6b") }
Hiển thị dữ liệu (ListOfMailId rỗng):
> db.demo526.find();
Kết quả:
Thêm email cho David (Subject=MongoDB) dùng
$elemMatchtìm phần tử,$pushthêm vào mảng ListOfMailId:> db.demo526.updateOne( { _id: ObjectId("5e8af031437efc8605595b6b"), "StudentInformation": { "$elemMatch": { "Name": "David", "Subject": "MongoDB" }} }, { "$push": { "StudentInformation.$.ListOfMailId": { "MailId": "David@gmail.com" }}} ) { "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }Kiểm tra lại - David đã có email:
> db.demo526.find();Kết quả:
Giải thích:
$elemMatchkhớp phần tử mảng thỏa mãn ĐIỀU KIỆN Name=David VÀ Subject=MongoDB. Toán tử$tham chiếu đến phần tử khớp đó.$pushthêm đối tượng vào mảng ListOfMailId.