更新嵌入式文档
对于以下架构:
{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 } }
)