$trunc (aggregation)
On this page
Definition
$truncChanged in version 4.2..
$trunctruncates a number to a whole integer or to a specified decimal place.MongoDB 4.2 adds the following syntax for
$trunc:{ $trunc : [ <number>, <place> ] }Field Type Description <number>number Can be any valid expression that resolves to a number. Specifically, the expression must resolve to an integer, double, decimal, orlong.$truncreturns an error if the expression resolves to a non-numeric data type.<place>integer Optional Can be any valid expression that resolves to an integer between -20 and 100, exclusive. e.g. -20 < place < 100. Defaults to 0 if unspecified.- If
<place>resolves to a positive integer,$trunctruncates to<place>decimal places.
For example,$trunc : [1234.5678, 2]truncates to two decimal places and returns1234.56. - If
<place>resolves to a negative integer,$truncreplaces<place>digits left of the decimal with0.
For example,$trunc : [1234.5678, -2]replaces to two digits left of the decimal with0and returns1200.
If the absolute value of<place>exceeds the number of digits to the left of the decimal,$truncreturns0.
For example,$trunc : [ 1234.5678, -5]specifies the fifth digit left of the decimal. This exceeds the number of digits left of the decimal and returns0. - If
<place>resolves to0,$trunctruncates all digits to the right of the decimal and returns the whole integer value.
For example,$trunc : [1234.5678, 0]returns1234
Prior to MongoDB 4.2,
$trunctruncated the input value to the whole integer. MongoDB 4.2 continues supporting the pre-4.2 syntax and behavior:{ $trunc: <number> }The
<number>expression can be any valid expression as long as it resolves to a number. For more information on expressions, see Expressions.- If
Behavior
$trunc does not round the truncated data. To round input values to a specified place, use the $round expression.
Returned Data Type
If truncating to a specific decimal place, the data type returned by $trunc matches the data type of the input expression or value.
If truncating to a whole integer value, $trunc returns an integer.
null, NaN, and +/- Infinity
-
If the argument resolves to a value of
nullor refers to a field that is missing,$truncreturnsnull. -
If the argument resolves to
NaN,$truncreturnsNaN. -
If the argument resolves to negative or positive infinity,
$truncreturns negative or positive infinity respectively.
| Example | Results |
|---|---|
{ $trunc: [ NaN, 1] } | NaN |
{ $trunc: [ null, 1] } | null |
{ $trunc : [ Infinity, 1 ] } | Infinity |
{ $trunc : [ -Infinity, 1 ] } | -Infinity |
Example
Create a collection named samples with the following documents:
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.34 } ] )
-
The following aggregation returns
valuetruncated to the first decimal place:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 1 ] } } } ])
The operation returns the following results:
{ "_id" : 1, "truncatedValue" : 19.2 } { "_id" : 2, "truncatedValue" : 28.7 } { "_id" : 3, "truncatedValue" : 34.3 } { "_id" : 4, "truncatedValue" : -45.3 } -
The following aggregation returns
valuetruncated to the first place:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", -1 ] } } } ])
The operation returns the following results:
{ "_id" : 1, "truncatedValue" : 10 } { "_id" : 2, "truncatedValue" : 20 } { "_id" : 3, "truncatedValue" : 30 } { "_id" : 4, "truncatedValue" : -40 } -
The following aggregation returns``value`` truncated to the whole integer:
db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 0 ] } } } ])
The operation returns the following results:
{ "_id" : 1, "truncatedValue" : 19 } { "_id" : 2, "truncatedValue" : 28 } { "_id" : 3, "truncatedValue" : 34 } { "_id" : 4, "truncatedValue" : -45 }