$push

在本页面

Definition

$push运算符的格式为:

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

要在嵌入式文档或数组中指定<field>,请使用dot notation

Behavior

如果文档中不存在要更新的字段,则$push将带有值的数组字段添加为其元素。

如果该字段不是数组,则操作将失败。

如果值是一个数组,则$push将整个数组附加为单个元素。要分别添加值的每个元素,请将$each修饰符与$push一起使用。有关示例,请参见将多个值附加到数组。有关$push可用的修饰符的列表,请参见Modifiers

Modifiers

您可以将$push运算符与以下修饰符一起使用:

Modifier Description
$each 将多个值附加到数组字段。


与其他修饰符结合使用时,不再需要将$each修饰符放在第一位。
| $slice |限制数组元素的数量。需要使用$each修饰符。
| $sort |Order 数组的元素。需要使用$each修饰符。
| $position |指定要在数组中插入新元素的位置。需要使用$each修饰符。如果没有$position修饰符,则$push会将元素追加到数组的末尾。

与修饰符一起使用时,$push运算符的格式为:

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

不管修饰符出现的 Sequences 如何,使用修饰符对push操作的处理均按以下 Sequences 进行:

Examples

将值附加到数组

下面的示例将89附加到scores数组:

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

将多个值附加到数组

使用$push$each修饰符可将多个值附加到数组字段。

下面的示例将name字段等于joe的文档的[ 90, 92, 85 ]的每个元素追加到scores数组:

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操作使用:

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

该操作的结果是仅保留三个最高得分测验:

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