MongoDB - модификатор $ slice
MongoDB provides different types of array update operators to update the values of the array fields in the documents and $slice
modifier is one of them. This modifier is used to limit the number of array items during a $push
operation.
Syntax:
{ $push: { <field>: { $each: [ <value1>, <value2>, ... ], $slice: <number> } } }
- If the value of number is zero, then this modifier will update the array field to an empty array.
- If the value of number is negative, then this modifier will update the array field to contain only the last number items.
- If the value of number is positive, then this modifier will update the array field to contain only the first number items.
$slice
modifier must appear with$each
modifier in the$push
operator. You are allowed to pass an empty array in the $each modifier which help $slice modifier to show its effect. If you use the $slice modifier without $each modifier, then you will get an error.- The order in which the modifiers appear in $push operation is immaterial.
В следующих примерах мы работаем с:
Database: GeeksforGeeks
Collection: contributor
Document: two documents that contain the details of the contributor in the form of field-value pairs.
Нарезка массива с конца:
In this example, we are adding new items in the language field and then use $slice modifier to trim the array to the last four items.
db.contributor.update({name: "Suman" }, {$push: {language: { $each: [ "SQL" , "JS++" ], $ slice : - 4 }}}) |
Нарезка массива спереди:
In this example, we are adding new items in the language field and then use $slice modifier to trim the array to the first five items.
db.contributor.update({name: "Rohit" }, {$push: {language: { $each: [ "R Language" , "JS++" ], $ slice : 5 }}}) |
Updating an array using $slice
modifier:
In this example, we are updating the array of the language field by triming the array to the last three items.
db.contributor.update({name: "Rohit" }, {$push: {language: { $each: [], $ slice : - 3 }}}) |
Using $slice
modifier with other modifiers with $push
operator:
In this example, we are using the $slice modifier with other modifiers like $each and $sort with $push operator.
db.contributor.update({name: "Rohit" }, {$push: { language: { $each: [ "C++" , "Kotlin" ], $sort: 1 , $ slice : 4 }}}) |
Здесь,
- Модификатор $ each используется для добавления нескольких документов в языковой массив.
- Модификатор $ sort используется для сортировки всех элементов измененного языкового массива по возрастанию.
- Модификатор $ slice используется для сохранения только первых четырех отсортированных элементов языкового массива.