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.