Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Cập nhật trường tại vị trí chính xác trong mảng lồng nhau MongoDB

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.