1. 程式人生 > >Mongodb更新陣列$push操作符

Mongodb更新陣列$push操作符

一、$push操作符新增指定的值到陣列中,$push操作符有如下的格式:

{ $push: { <field1>: <value1>, ... } }

指定一個<field>在一個內嵌文件中或者在一個數組中,使用點號分開

$push修飾符可以和$each、$slice、$sort、$position修飾符一起使用,當使用這些修飾符的時候$push操作符有如下格式:

{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }

二、例如:新增一個值到陣列中

如下語句新增89到scores欄位中

db.students.update(
   { _id: 1 },
   { $push: { scores: 89 } }
)

新增多個值到陣列中

使用$push操作符和$each修飾符一起新增多個值到陣列欄位中。

如下例子新增陣列[ 90, 92, 85 ]中的每個元素到陣列scores欄位中,對於欄位name等於joe的文件:

db.students.update(
   { name: "joe" },
   { $push: { scores: { $each: [ 90, 92, 85 ] } } }
)

$push操作符和多個操作符一起使用

集合students有如下文件:

{
   "_id" : 5,
   "quizzes" : [
      { "wk": 1, "score" : 10 },
      { "wk": 2, "score" : 8 },
      { "wk": 3, "score" : 5 },
      { "wk": 4, "score" : 6 }
   ]
}


如下$push操作符使用:

$each修飾符新增多個值到quizzes陣列中;

$sort修飾符將陣列quizzes中的元素按照score元素降序排列;

$slice修飾符只留下陣列quizzes中前三個排序元素;

db.students.update(
   { _id: 5 },
   {
     $push: {
       quizzes: {
          $each: [ { wk: 5, score: 8 }, { wk: 6, score: 7 }, { wk: 7, score: 6 } ],
          $sort: { score: -1 },
          $slice: 3
       }
     }
   }
)


操作的結果是隻留下quizzes陣列中分數最高的三個:

{
  "_id" : 5,
  "quizzes" : [
     { "wk" : 1, "score" : 10 },
     { "wk" : 2, "score" : 8 },
     { "wk" : 5, "score" : 8 }
  ]
}