Cập nhật phần tử tại vị trí chính xác trong mảng lồng nhau. Cú pháp dùng positional operator $ kèm chỉ số index:
{"yourArrayDocumentName.$.yourNestedArrayDocument.yourPosition":"yourValue"}
Tạo collection updateExactField:
> db.updateExactField.insertOne({"ActorId":1,"ActorDetails":[{"ActorName":"Johnny Depp","MovieList":["The Tourist","Public Enemy"]}, {"ActorName":"Chris Evans","MovieList":["Captain America","Avengers"]}]});
{ "acknowledged" : true, "insertedId" : ObjectId("5c6d7f63f2db199c1278e7f1") }
Hiển thị:
> db.updateExactField.find().pretty();
Trường hợp 1: Cập nhật vị trí index 2 (phần tử thứ 3) của MovieList cho Chris Evans:
> db.updateExactField.update({"ActorDetails.ActorName":"Chris Evans"}, {$set:{"ActorDetails.$.MovieList.2":"Avengers:Infinity War"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Kết quả: MovieList có 3 phần tử, "Avengers:Infinity War" ở index 2.
Trường hợp 2: Cập nhật index 1 (phần tử thứ 2):
> db.updateExactField.update({"ActorDetails.ActorName":"Chris Evans"}, {$set:{"ActorDetails.$.MovieList.1":"Gifted"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Kết quả: "Gifted" ở index 1, "Avengers:Infinity War" dồn sang index 2.