คุณสามารถอัปเดตอาร์เรย์องค์ประกอบที่แน่นอนใน 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