更新嵌入式文件

對於以下架構:

{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 } }
)