On this page本页内容
Starting in MongoDB 5.0, update operators process document fields with string-based names in lexicographic order. 从MongoDB 5.0开始,更新运算符以词典顺序处理具有基于字符串的名称的文档字段。Fields with numeric names are processed in numeric order. 具有数字名称的字段按数字顺序处理。See Update Operators Behavior for details.有关详细信息,请参阅更新运算符行为。
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. $push将整个数组附加为一个元素。To add each element of the value separately, use the 若要单独添加值的每个元素,请使用带有$each modifier with $push. $push的$each修饰符。For an example, see Append Multiple Values to an Array. 有关示例,请参阅将多个值附加到数组。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条目(这意味着该操作是无操作)。
You can use the 可以将$push operator with the following modifiers:$push运算符与以下修饰符一起使用:
| Modifier | |
|---|---|
$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操作的处理按以下顺序进行,而不管修饰符出现的顺序如何:
Create the 创建students collection:students集合:
db.students.insertOne( { _id: 1, scores: [ 44, 78, 38, 80 ] } )
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 ] }
Use 使用$push with the $each modifier to append multiple values to the array field.$push和$each修饰符将多个值附加到数组字段。
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 ]的每个元素附加到文档的scores数组中,其中name字段等于joe:
db.students.updateOne(
{ name: "joe" },
{ $push: { scores: { $each: [ 90, 92, 85 ] } } }
)
$push Operator with Multiple Modifiers$push运算符Add 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操作使用:
$each modifier to add multiple documents to the quizzes array,$each修饰符将多个文档添加到quizzes数组,$sort modifier to sort all the elements of the modified quizzes array by the score field in descending order, and$sort修饰符按score字段按降序对修改后的quizzes数组的所有元素进行排序,并且$slice modifier to keep only the first three sorted elements of the quizzes array.$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 }
]
}