On this page
$push
在本页面
Definition
$push
- $push运算符将指定的值附加到数组。
$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 } }
)
将多个值附加到数组
下面的示例将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操作使用:
$each修饰符可将多个文档添加到
quizzes
数组,$sort修饰符,以按
score
字段降序对修改后的quizzes
数组的所有元素进行排序,以及$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
}
}
}
)
该操作的结果是仅保留三个最高得分测验:
{
"_id" : 5,
"quizzes" : [
{ "wk" : 1, "score" : 10 },
{ "wk" : 2, "score" : 8 },
{ "wk" : 5, "score" : 8 }
]
}