$slice (aggregation)
Definition
New in version 3.2.
Returns a subset of an array.
$slice
has one of two syntax forms:
The following syntax returns elements from either the start or endof the array:
- { $slice: [ <array>, <n> ] }
The following syntax returns elements from the specified position inthe array:
- { $slice: [ <array>, <position>, <n> ] }
OperandDescription<array>
Any valid expression as long asit resolves to an array.<position>
Optional. Any valid expression as longas it resolves to an integer.
- If positive,
$slice
determines the starting position fromthe start of the array. If<position>
is greater than the number ofelements, the$slice
returns an empty array. If negative,
$slice
determines the starting position fromthe end of the array. If the absolute value of the<position>
isgreater than the number of elements, the starting position is the startof the array.<n>
Any valid expression as long as itresolves to an integer. If<position>
is specified,<n>
mustresolve to a positive integer.If positive,
$slice
returns up to the firstn
elements in the array. If the<position>
is specified,$slice
returns the firstn
elements starting from theposition.- If negative,
$slice
returns up to the lastn
elementsin the array.n
cannot resolve to a negative number if<position>
is specified.
For more information on expressions, see Expressions.
Behavior
Example | Results |
---|---|
|
|
|
|
|
|
|
|
Example
A collection named users
contains the following documents:
- { "_id" : 1, "name" : "dave123", favorites: [ "chocolate", "cake", "butter", "apples" ] }
- { "_id" : 2, "name" : "li", favorites: [ "apples", "pudding", "pie" ] }
- { "_id" : 3, "name" : "ahn", favorites: [ "pears", "pecans", "chocolate", "cherries" ] }
- { "_id" : 4, "name" : "ty", favorites: [ "ice cream" ] }
The following example returns at most the first three elements in thefavorites
array for each user:
- db.users.aggregate([
- { $project: { name: 1, threeFavorites: { $slice: [ "$favorites", 3 ] } } }
- ])
The operation returns the following results:
- { "_id" : 1, "name" : "dave123", "threeFavorites" : [ "chocolate", "cake", "butter" ] }
- { "_id" : 2, "name" : "li", "threeFavorites" : [ "apples", "pudding", "pie" ] }
- { "_id" : 3, "name" : "ahn", "threeFavorites" : [ "pears", "pecans", "chocolate" ] }
- { "_id" : 4, "name" : "ty", "threeFavorites" : [ "ice cream" ] }