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