Computer >> Máy Tính >  >> Lập trình >> MongoDB

Cập nhật trường trong mảng phần tử chính xác trong MongoDB?

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.