Definition定义
$pushThe$pushoperator appends a specified value to an array.$push运算符将指定值附加到数组中。
Compatibility兼容性
You can use 您可以将$push for deployments hosted in the following environments:$push用于在以下环境中托管的部署:
- MongoDB Atlas
: The fully managed service for MongoDB deployments in the cloud:云中MongoDB部署的完全托管服务
- MongoDB Enterprise
: The subscription-based, self-managed version of MongoDB:MongoDB的基于订阅的自我管理版本 - MongoDB Community
: The source-available, free-to-use, and self-managed version of MongoDB:MongoDB的源代码可用、免费使用和自我管理版本
Syntax语法
The $push operator has the form:$push运算符的形式如下:
{ $push: { <field1>: <value1>, ... } }
To specify a 要在嵌入式文档或数组中指定<field> in an embedded document or in an array, use dot notation.<field>,请使用点符号。
Behavior行为
Starting in MongoDB 5.0, update operators process document fields with string-based names in lexicographic order. Fields with numeric names are processed in numeric order. See Update Operators Behavior for details.从MongoDB 5.0开始,更新运算符按字典顺序处理具有基于字符串的名称的文档字段。具有数字名称的字段按数字顺序处理。有关详细信息,请参阅更新运算符行为。
If the field is absent in the document to update, 如果要更新的文档中缺少该字段,则$push adds the array field with the value as its element.$push会添加具有值的数组字段作为其元素。
If the field is not an array, the operation will fail.如果字段不是数组,则操作将失败。
If the value is an array, 如果该值是一个数组,则$push appends the whole array as a single element. To add each element of the value separately, use the $each modifier with $push. $push会将整个数组附加为单个元素。要单独添加值的每个元素,请将$each修饰符与$push一起使用。For an example, see Append a Value to Arrays in Multiple Documents. For a list of modifiers available for 例如,请参阅在多个文档中将值附加到数组。有关可用于$push, see Modifiers.$push的修饰符列表,请参见修饰符。
Starting in MongoDB 5.0, 从MongoDB 5.0开始,当您使用带有空操作数表达式(mongod no longer raises an error when you use an update operator like $push with an empty operand expression ( { } ). { })的更新运算符(如$push)时,mongod不再引发错误。An empty update results in no changes and no oplog entry is created (meaning that the operation is a no-op).空更新不会导致任何更改,也不会创建oplog条目(这意味着该操作是无操作)。
Modifiers修饰符
You can use the 您可以将$push operator with the following modifiers:$push运算符与以下修饰符一起使用:
$each | |
$slice | $each modifier.$each修饰符。 |
$sort | $each modifier.$each修饰符。 |
$position | $each modifier. $each修饰符。$position modifier, the $push appends the elements to the end of the array.$position修饰符,$push会将元素附加到数组的末尾。 |
When used with modifiers, the 当与修饰符一起使用时,$push operator has the form:$push运算符的形式如下:
{ $push: { <field1>: { <modifier1>: <value1>, ... }, ... } }
The processing of the 带有修饰符的$push operation with modifiers occur in the following order, regardless of the order in which the modifiers appear:$push操作的处理按以下顺序进行,而不管修饰符出现的顺序如何:
Update array to add elements in the correct position.更新数组以在正确位置添加元素。Apply sort, if specified.如果指定,则应用排序。Slice the array, if specified.如果指定,则对数组进行分片。Store the array.存储数组。
Examples示例
Create the 创建students collection:students集合:
db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )
Append a Value to an Array将值附加到数组
The following example appends 以下示例将89 to the scores array:89附加到scores数组中:
db.students.updateOne(
{ _id: 1 },
{ $push: { scores: 89 } }
)
Example output:示例输出:
{ _id: 1, scores: [ 44, 78, 38, 80, 89 ] }Append a Value to Arrays in Multiple Documents在多个文档中为数组添加值
Add the following documents to the 将以下文档添加到students collection: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 ] }
] )
The following 以下$push operation appends 95 to the scores array in each document:$push操作将95附加到每个文档中的scores数组中:
db.students.updateMany(
{ },
{ $push: { scores: 95 } }
)
To confirm that each 要确认每个scores array includes 95, run the following operation:scores数组包括95,请运行以下操作:
db.students.find()
The operation returns the following results:该操作返回以下结果:
[
{ _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 ] }
]Append Multiple Values to an Array将多个值附加到数组
Use 使用$push with the $each modifier to append multiple values to the array field.$tush和$teach修饰符将多个值附加到数组字段。
The following example appends each element of 以下示例将[ 90, 92, 85 ] to the scores array for the document where the name field equals joe:[90,92,85]的每个元素附加到name字段等于joe的文档的scores数组中:
db.students.updateOne(
{ name: "joe" },
{ $push: { scores: { $each: [ 90, 92, 85 ] } } }
)Use $push Operator with Multiple Modifiers使用带有多个修饰符的$push运算符
$push Operator with Multiple ModifiersAdd the following document to the 将以下文档添加到students collection:students集合中:
db.students.insertOne(
{
"_id" : 5,
"quizzes" : [
{ "wk": 1, "score" : 10 },
{ "wk": 2, "score" : 8 },
{ "wk": 3, "score" : 5 },
{ "wk": 4, "score" : 6 }
]
}
)
The following 以下$push operation uses:$push操作使用:
the$eachmodifier to add multiple documents to thequizzesarray,$each修饰符用于将多个文档添加到quizzes数组中,the$sortmodifier to sort all the elements of the modifiedquizzesarray by thescorefield in descending order, and$sort修饰符,用于按score字段降序对修改后的quizzes数组的所有元素进行排序,以及the$slicemodifier to keep only the first three sorted elements of thequizzesarray.$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
}
}
}
)
After the operation only the three highest scoring quizzes are in the array:操作后,数组中只有三个得分最高的测验:
{
"_id" : 5,
"quizzes" : [
{ "wk" : 1, "score" : 10 },
{ "wk" : 2, "score" : 8 },
{ "wk" : 5, "score" : 8 }
]
}