您可以使用以下语句在MongoDB中更新in精确元素数组。语法如下:
{"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:此处,使用精确的数组元素进行更新,即位置3rd,即索引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,即位置2nd。查询如下:
> db.updateExactField.update( {"ActorDetails.ActorName":"Chris Evans"}, {$set: {"ActorDetails.$.MovieList.1":"Gifted"}}); WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
让我们借助find()
method来检查集合中的文档。查询如下:
> 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。