On this page本页内容
$slice
The $slice
modifier limits the number of array elements during a $push
operation. $slice
修饰符限制$push
操作期间的数组元素数。To project, or return, a specified number of array elements from a read operation, see the 要从读取操作中投影或返回指定数量的数组元素,请改为使用$slice
projection operator instead.$slice
投影运算符。
To use the 要使用$slice
modifier, it must appear with the $each
modifier. $slice
修饰符,它必须与$each
修饰符一起出现。You can pass an empty array 可以将空数组[]
to the $each
modifier such that only the $slice
modifier has an effect.[]
传递给$each
修饰符,以便只有$slice
修饰符具有效果。
{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $slice: <num> } } }
The <num>
can be:<num>
可以是:
Zero | <field> to an empty array.<field> 更新为空数组。 |
Negative | <field> to contain only the last <num> elements.<field> 以仅包含最后<num> 元素。
|
Positive | <field> contain only the first <num> elements.<field> 只包含前<num> 元素。
|
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. 从MongoDB 5.0开始,更新运算符以词典顺序处理具有基于字符串的名称的文档字段。具有数字名称的字段按数字顺序处理。See Update Operators Behavior for details.有关详细信息,请参阅更新运算符行为。
The order in which the modifiers appear is immaterial. 修饰词出现的顺序无关紧要。Previous versions required the 以前的版本要求$each
modifier to appear as the first modifier if used in conjunction with $slice
. $each
修饰符在与$slice
一起使用时显示为第一个修饰符。For a list of modifiers available for 有关$push
, see Modifiers.$push
可用的修饰符列表,请参阅修饰符。
Trying to use the 尝试在不使用$slice
modifier without the $each
modifier results in an error.$each
修饰符的情况下使用$slice
修饰符将导致错误。
A collection students
contains the following document:students
集合包含以下文档:
{ "_id" : 1, "scores" : [ 40, 50, 60 ] }
The following operation adds new elements to the 以下操作向scores
array, and then uses the $slice
modifier to trim the array to the last five elements:scores
数组添加新元素,然后使用$slice
修饰符将数组修剪为最后五个元素:
db.students.updateOne( { _id: 1 }, { $push: { scores: { $each: [ 80, 78, 86 ], $slice: -5 } } } )
The result of the operation is slice the elements of the updated 该操作的结果是将更新的scores
array to the last five elements:scores
数组的元素分片到最后五个元素:
{ "_id" : 1, "scores" : [ 50, 60, 80, 78, 86 ] }
A collection students
contains the following document:students
集合包含以下文档:
{ "_id" : 2, "scores" : [ 89, 90 ] }
The following operation adds new elements to the 以下操作向scores
array, and then uses the $slice
modifier to trim the array to the first three elements.scores
数组添加新元素,然后使用$slice
修饰符将数组修剪为前三个元素。
db.students.updateOne( { _id: 2 }, { $push: { scores: { $each: [ 100, 20 ], $slice: 3 } } } )
The result of the operation is to slice the elements of the updated 该操作的结果是将更新后的scores
array to the first three elements:scores
数组的元素分片为前三个元素:
{ "_id" : 2, "scores" : [ 89, 90, 100 ] }
A collection students
contains the following document:students
集合包含以下文档:
{ "_id" : 3, "scores" : [ 89, 70, 100, 20 ] }
To update the 要仅使用scores
field with just the effects of the $slice
modifier, specify the number of elements to slice (e.g. -3
) for the $slice
modifier and an empty array []
for the $each
modifier, as in the following:$slice
修饰符的效果更新分数字段,请为$slice
修饰符指定要分片的元素数(例如-3
),并为$each
修饰符指定空数组[]
,如下所示:
db.students.updateOne( { _id: 3 }, { $push: { scores: { $each: [ ], $slice: -3 } } } )
The result of the operation is to slice the elements of the 该操作的结果是将scores
array to the last three elements:scores
数组的元素分为最后三个元素:
{ "_id" : 3, "scores" : [ 70, 100, 20 ] }
$slice
with Other $push
Modifiers$slice
与其他$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
修饰符按quizzes
字段按降序对修改后的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 } ] }
The order of the modifiers is immaterial to the order in which the modifiers are processed. 修饰符的顺序与修饰符的处理顺序无关。See Modifiers for details.有关详细信息,请参阅修饰符。