$slice

在本页面

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

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

<num>可以是:

Value Description
Zero 将数组<field>更新为空数组。
Negative 将数组<field>更新为仅包含最后<num>个元素。
Positive 要更新数组<field>,只包含前<num>个元素。


2.6 版中的新功能。

Behavior

修饰符出现的 Sequences 无关紧要。如果与$slice结合使用,则以前的版本要求$each修饰符显示为第一个修饰符。有关$push可用的修饰符的列表,请参见Modifiers

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

Examples

从数组末尾切片

集合students包含以下文档:

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

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

db.students.update(
   { _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.update(
   { _id: 2 },
   {
     $push: {
       scores: {
         $each: [ 100, 20 ],
         $slice: 3
       }
     }
   }
)

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

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

仅使用切片更新阵列

集合students包含以下文档:

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

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

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

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

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

将$ slice 与其他$ push 修饰符一起使用

集合students包含以下文档:

{
   "_id" : 5,
   "quizzes" : [
      { "wk": 1, "score" : 10 },
      { "wk": 2, "score" : 8 },
      { "wk": 3, "score" : 5 },
      { "wk": 4, "score" : 6 }
   ]
}

以下$push操作使用:

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

修饰符的 Sequences 与修饰符的处理 Sequences 无关紧要。有关详情,请参见Modifiers

首页