Docs 菜单

Docs 主页开发应用程序MongoDB Manual

$slice

在此页面上

  • 行为
  • 举例
$slice

$slice修饰符限制$push操作期间数组元素的数量。要从读取操作中投影或返回指定数量的数组元素,请参阅$slice投影操作符。

要使用$slice修饰符,它必须$each修饰符一起出现。您可以将空数组[]传递给$each修饰符,这样只有$slice修饰符有效。

{
$push: {
<field>: {
$each: [ <value1>, <value2>, ... ],
$slice: <num>
}
}
}

<num> 可以是:

说明
要将数组 <field> 更新为空数组。
负数
更新数组 <field> 以仅包含最后的 <num> 个元素。
正的
更新数组 <field> 以仅包含第一 <num> 元素。

从 MongoDB 5.0 开始,更新操作符按字典顺序处理具有基于字符串的名称的文档字段。具有数字名称的字段按数字顺序处理。详情请参阅更新操作符行为

修饰符出现的顺序并不重要。以前的版本要求与 一起使用时,$each $slice修饰符必须作为第一个修饰符出现。有关$push 可用修饰符的列表,请参阅 修饰符。

尝试在没有$slice 修饰符的情况下使用$each 修饰符会导致错误。

集合students包含以下文档:

{ "_id" : 1, "scores" : [ 40, 50, 60 ] }

以下操作向scores数组添加新元素,然后使用$slice修饰符将数组修剪到最后五个元素:

db.students.updateOne(
{ _id: 1 },
{
$push: {
scores: {
$each: [ 80, 78, 86 ],
$slice: -5
}
}
}
)

操作结果是将更新后的 scores 数组的元素切割到最后五个元素:

{ "_id" : 1, "scores" : [ 50, 60, 80, 78, 86 ] }

集合students包含以下文档:

{ "_id" : 2, "scores" : [ 89, 90 ] }

以下操作向scores数组添加新元素,然后使用$slice修饰符将数组修剪为只剩下前三个元素。

db.students.updateOne(
{ _id: 2 },
{
$push: {
scores: {
$each: [ 100, 20 ],
$slice: 3
}
}
}
)

操作的结果是将更新后的 scores 数组的元素切割为前三个元素:

{ "_id" : 2, "scores" : [ 89, 90, 100 ] }

集合students包含以下文档:

{ "_id" : 3, "scores" : [ 89, 70, 100, 20 ] }

scores要仅使用$slice 修饰符的效果更新-3 $slice[]$each字段,请为 修饰符指定要切片的元素数(例如 ),并为 指定空数组 ,如下所示:

db.students.updateOne(
{ _id: 3 },
{
$push: {
scores: {
$each: [ ],
$slice: -3
}
}
}
)

该操作的结果是将 scores 数组的元素切割到最后三个元素:

{ "_id" : 3, "scores" : [ 70, 100, 20 ] }

将以下文档添加到 students 集合中:

db.students.insertOne(
{
"_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.updateOne(
{ _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 }
]
}

修饰符的顺序与修饰符的处理顺序无关。如需了解详细信息,请参阅“修饰符”。

← $position
$sort →

在此页面上