更新嵌入式文档

对于以下架构:

{name: 'Tom', age: 28, marks: [50, 60, 70]}

将 Tom 的标记更新为 55,其中标记为 50(使用位置运算符$):

db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})

对于以下架构:

{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}

将 Tom 的英文标记更新为 85:

db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})

解释上面的例子:

通过使用{name:Tom,“marks.subject”:English},你将获得标记数组中对象的位置,其中 subject 是英语。在“marks。$。marks”中,$用于更新标记数组的该位置

更新数组中的值

位置$运算符标识要更新的数组中的元素,而不显式指定元素在数组中的位置。

考虑学生收藏以下文件:

{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }

要在第一个文档的等级数组中更新 80 到 82,如果你不知道数组中元素的位置,请使用位置$运算符:

db.students.update(
   { _id: 1, grades: 80 },
   { $set: { "grades.$" : 82 } }
)