Mongo更新数组$slice修饰符

一、$slice元素会限制数组元素的个数在进行$push操作的时候,$slice修饰符必须和$each修饰符一起使用,你也可以传递一个空的数组给$each修饰符,因此只有$slice修饰符起作用。

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

二、一个students集合包含如下文档:

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

如下操作添加新的元素到scores数组中,然后使用$slice修饰符截取后面五个元素

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

操作的结果是取得了后面五个元素:

{ "_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
       }
     }
   }
)

操作的结果是:

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

四、只使用$slice更新数组

一个students集合包含如下文档:

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

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

结果是截取了后三个元素

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

五、$slice和$push的其他修饰符$sort、$each一起使用

一个students集合文档如下:

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

使用修饰符对集合文档进行操作:

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值