如何在MongoDB中更新精確的陣列元素?


您可以使用以下語句在MongoDB中更新精確的陣列元素。語法如下:

{"yourArrayDocumentName.$.yourNestedArrayDocument.yourPosition":"yourValue"}});

為了理解上述語法,讓我們建立一個包含一些文件的集合。建立包含文件的集合的查詢如下:

> 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")
}

現在,您可以使用find()方法顯示集合中的文件。查詢如下:

> db.updateExactField.find().pretty();

輸出如下:

{
   "_id" : ObjectId("5c6d7f63f2db199c1278e7f1"),
   "ActorId" : 1,
   "ActorDetails" : [
      {
         "ActorName" : "Johnny Depp",
         "MovieList" : [
            "The Tourist",
            "Public Enemy"
         ]
      },
      {
         "ActorName" : "Chris Evans",
         "MovieList" : [
            "Captain America",
            "Avengers"
         ]
      }
   ]
}

案例1:在這裡,更新精確的陣列元素,即第3個位置,因為陣列從0開始,所以索引為2。查詢如下:

> db.updateExactField.update(
... {"ActorDetails.ActorName":"Chris Evans"},
... {$set:
... {"ActorDetails.$.MovieList.2":"Avengers:Infinity War"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

讓我們使用find()方法顯示集合中的文件。查詢如下:

> db.updateExactField.find().pretty();

輸出如下:

{
   "_id" : ObjectId("5c6d7f63f2db199c1278e7f1"),
   "ActorId" : 1,
   "ActorDetails" : [
      {
         "ActorName" : "Johnny Depp",
         "MovieList" : [
            "The Tourist",
            "Public Enemy"
         ]
      },
      {
         "ActorName" : "Chris Evans",
         "MovieList" : [
            "Captain America",
            "Avengers",
            "Avengers:Infinity War"
         ]
      }
   ]
}

檢視上面的輸出,值“Avengers:Infinite War”位於第3個位置,即索引2。

案例2:現在讓我們更新索引1,即第2個位置。查詢如下:

> db.updateExactField.update( {"ActorDetails.ActorName":"Chris Evans"}, {$set:
{"ActorDetails.$.MovieList.1":"Gifted"}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

讓我們使用find()方法檢查集合中的文件。查詢如下:

> db.updateExactField.find().pretty();

輸出如下:

{
   "_id" : ObjectId("5c6d7f63f2db199c1278e7f1"),
   "ActorId" : 1,
   "ActorDetails" : [
      {
         "ActorName" : "Johnny Depp",
         "MovieList" : [
            "The Tourist",
            "Public Enemy"
         ]
      },
      {
         "ActorName" : "Chris Evans",
         "MovieList" : [
            "Captain America",
            "Gifted",
            "Avengers:Infinity War"
         ]
      }
   ]
}

檢視上面的示例輸出,值“Gifted”位於第2個位置,即索引1。

更新於:2019年7月30日

231 次瀏覽

啟動你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.