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