Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MongoDB

อัปเดตฟิลด์ในอาร์เรย์องค์ประกอบที่แน่นอนใน 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 ซึ่งเป็นดัชนี 2 เนื่องจากอาร์เรย์เริ่มต้นจาก 0 การสืบค้นมีดังนี้:

> 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