Mongo更新数组$slice修饰符

来源:互联网 发布:电极式暖手宝 知乎 编辑:程序博客网 时间:2024/06/05 16:06

一、$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 }  ]}


原创粉丝点击