1.更新數組中單個元素
首先通過(guo)下述(shu)語(yu)句(ju)創建(jian)一張student(學(xue)生成績表),并插入3條(tiao)語(yu)句(ju),grades為(wei)分(fen)數數組。
db.students.insert([
   { "_id" : 1, "grades" : [ 85, 80, 80 ] },
   { "_id" : 2, "grades" : [ 88, 90, 92 ] },
   { "_id" : 3, "grades" : [ 85, 100, 90 ] }
])如果(guo)我們想(xiang)更新grades數(shu)組中,分(fen)數(shu)等于80的第一個數(shu)組元素,我們可以使用(yong)下述命令,
db.students.updateOne(
   { _id: 1, grades: 80 },
   { $set: { "grades.$" : 82 } }
)執行完(wan)之后,學生成績表(biao)的數據(ju)如下:
{ "_id" : 1, "grades" : [ 85, 82, 80 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
若是數組元素為對象(xiang)的情況,采用(yong)下述語法進(jin)行更新,
db.collection.update(
   { <query selector> },
   { <update operator>: { "array.$.field" : value } }
)示例:
{
  _id: 4,
  grades: [
     { grade: 80, mean: 75, std: 8 },
     { grade: 85, mean: 90, std: 5 },
     { grade: 85, mean: 85, std: 8 }
  ]
}假如我(wo)們想(xiang)更(geng)新數組對象中,grade=85對象的(de)std元素的(de)值,可以使用下述語句(ju)
db.students.updateOne(
   { _id: 4, "grades.grade": 85 },
   { $set: { "grades.$.std" : 6 } }
)語句執行完成之后,結果如下(xia)
{
   "_id" : 4,
   "grades" : [
      { "grade" : 80, "mean" : 75, "std" : 8 },
      { "grade" : 85, "mean" : 90, "std" : 6 },
      { "grade" : 85, "mean" : 85, "std" : 8 }
   ]
}
2.更新數組中所有元素
采(cai)用(yong)下屬命令格式更新
db.collection.update(
   { <query selector> },
   { <update operator>: { "array.$[].field" : value } }
)示例
db.students2.update(
   {_id: 5 },
   { $set: { "grades.$[].grade" : 90, "grades.$[].stu" : 9} },
   { multi: true }
)
3.根據數組元素條件查詢
根(gen)據數(shu)組元(yuan)素(su)條件查詢,可以使用$elemMatch,
示例:
db.students2.find({'name':'lisi', 'grades':{$elemMatch:{'grade': 90}}}).pretty();上述(shu)命(ming)令可(ke)以將(jiang)姓(xing)名(ming)是lisi且(qie)grades數組元素對象中,屬性grade=90的文(wen)檔查詢出來,某(mou)些情(qing)況下,數組元素對象很多(duo),若只想顯示符(fu)合(he)條件的指(zhi)定數組,可(ke)以使用下述(shu)命(ming)令
db.students2.find({'name':'lisi', 'grades.grade':90}, {'grades':{$elemMatch:{'grade':90}}}).pretty();