更新嵌入式文件
對於以下架構:
{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 } }
)