文档菜单
文档首页
/
MongoDB 手册
/ / / /

$push

本页内容

  • 定义
  • 兼容性
  • 语法
  • 行为
  • 修饰符
  • 示例
$push

$push运算符将指定值追加到数组中。

您可以在以下环境中使用$push

  • MongoDB Atlas:MongoDB在云中的托管服务

  • MongoDB Enterprise:基于订阅的自托管MongoDB版本

  • MongoDB Community:源代码可用的免费使用、自托管MongoDB版本

操作符 $push 的形式为

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

要指定一个嵌套文档或数组中的 <field>,请使用点表示法。

从 MongoDB 5.0 版本开始,更新操作符按基于字符串的名称的字典顺序处理文档字段。具有数字名称的字段按数字顺序处理。有关详细信息,请参阅更新操作符行为

如果要更新的文档中不存在该字段,$push 会添加一个具有指定值的数组字段。

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

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

从MongoDB 5.0版本开始,当使用mongod程序,并使用空操作数表达式({ })更新操作符,如$push时,不再引发错误。空更新不会产生任何更改,也不会创建操作日志条目(表示操作为空操作)。

您可以使用以下修饰符与$push操作符一起使用

修饰符
描述
将多个值追加到数组字段。
限制数组元素的数量。需要使用$each修饰符。
对数组元素进行排序。需要使用$each修饰符。
指定在数组中插入新元素的位置。需要使用$each修饰符。如果没有使用$position修饰符,则$push将元素追加到数组的末尾。

与修饰符一起使用时,$push操作符的形式为

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

修饰符的顺序与修饰符出现顺序无关,以下顺序处理$push操作

  1. 更新数组以添加正确位置的元素。

  2. 如果指定,应用排序。

  3. 如果指定,截断数组。

  4. 存储数组。

创建students集合

db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )

以下示例将 89 添加到 scores 数组中

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

示例输出

{ _id: 1, scores: [ 44, 78, 38, 80, 89 ] }

将以下文档添加到 students 集合中

db.students.insertMany( [
{ _id: 2, scores: [ 45, 78, 38, 80, 89 ] } ,
{ _id: 3, scores: [ 46, 78, 38, 80, 89 ] } ,
{ _id: 4, scores: [ 47, 78, 38, 80, 89 ] }
] )

以下 $push 操作将 95 添加到每个文档中的 scores 数组中

db.students.updateMany(
{ },
{ $push: { scores: 95 } }
)

为了确认每个 scores 数组都包含 95,请运行以下操作

db.students.find()

操作返回以下结果

[
{ _id: 1, scores: [ 44, 78, 38, 80, 89, 95 ] },
{ _id: 2, scores: [ 45, 78, 38, 80, 89, 95 ] },
{ _id: 3, scores: [ 46, 78, 38, 80, 89, 95 ] },
{ _id: 4, scores: [ 47, 78, 38, 80, 89, 95 ] }
]

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

以下示例将 [ 90, 92, 85 ] 的每个元素添加到名为 joe 的文档的 scores 数组中。

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

将以下文档添加到 students 集合

db.students.insertOne(
{
"_id" : 5,
"quizzes" : [
{ "wk": 1, "score" : 10 },
{ "wk": 2, "score" : 8 },
{ "wk": 3, "score" : 5 },
{ "wk": 4, "score" : 6 }
]
}
)

以下 $push 操作使用

  • $each 修饰符向 quizzes 数组添加多个文档,

  • $sort 修饰符按 score 字段降序对所有修改后的 quizzes 数组元素进行排序,以及

  • $slice 修饰符仅保留 quizzes 数组中排序后的前三个元素。

db.students.updateOne(
{ _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 }
]
}

提示

另请参阅

返回

$pull