Bạn có thể cập nhật mảng phần tử chính xác trong MongoDB với sự trợ giúp của câu lệnh dưới đây. Cú pháp như sau:
{"yourArrayDocumentName.$.yourNestedArrayDocument.yourPosition":"yourValue"}});
Để hiểu cú pháp trên, chúng ta hãy tạo một bộ sưu tập với một số tài liệu. Truy vấn để tạo một bộ sưu tập với tài liệu như sau:
> 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") }
Giờ đây, bạn có thể hiển thị các tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find (). Truy vấn như sau:
> db.updateExactField.find().pretty();
Sau đây là kết quả:
{ "_id" : ObjectId("5c6d7f63f2db199c1278e7f1"), "ActorId" : 1, "ActorDetails" : [ { "ActorName" : "Johnny Depp", "MovieList" : [ "The Tourist", "Public Enemy" ] }, { "ActorName" : "Chris Evans", "MovieList" : [ "Captain America", "Avengers" ] } ] }
Trường hợp 1 :Tại đây, cập nhật với các phần tử mảng chính xác, tức là vị trí thứ 3, là chỉ số 2 vì mảng bắt đầu từ 0. Truy vấn như sau:
> db.updateExactField.update( ... {"ActorDetails.ActorName":"Chris Evans"}, ... {$set: ... {"ActorDetails.$.MovieList.2":"Avengers:Infinity War"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Hãy để chúng tôi hiển thị tài liệu từ bộ sưu tập với sự trợ giúp của find (). Truy vấn như sau:
> db.updateExactField.find().pretty();
Sau đây là kết quả:
{ "_id" : ObjectId("5c6d7f63f2db199c1278e7f1"), "ActorId" : 1, "ActorDetails" : [ { "ActorName" : "Johnny Depp", "MovieList" : [ "The Tourist", "Public Enemy" ] }, { "ActorName" : "Chris Evans", "MovieList" : [ "Captain America", "Avengers", "Avengers:Infinity War" ] } ] }
Nhìn vào kết quả ở trên, giá trị “Avengers:Infinite War” ở vị trí thứ 3, tức là chỉ số 2.
Trường hợp 2 :Bây giờ chúng ta hãy cập nhật với chỉ số 1 tức là vị trí thứ 2. Truy vấn như sau:
> db.updateExactField.update( {"ActorDetails.ActorName":"Chris Evans"}, {$set: {"ActorDetails.$.MovieList.1":"Gifted"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Hãy để chúng tôi kiểm tra tài liệu từ một bộ sưu tập với sự trợ giúp của phương thức find (). Truy vấn như sau:
> db.updateExactField.find().pretty();
Sau đây là kết quả:
{ "_id" : ObjectId("5c6d7f63f2db199c1278e7f1"), "ActorId" : 1, "ActorDetails" : [ { "ActorName" : "Johnny Depp", "MovieList" : [ "The Tourist", "Public Enemy" ] }, { "ActorName" : "Chris Evans", "MovieList" : [ "Captain America", "Gifted", "Avengers:Infinity War" ] } ] }
Nhìn vào kết quả đầu ra mẫu ở trên, giá trị "Gifted" nằm ở vị trí 2, tức là chỉ số 1.