$mod (aggregation)
On this page
Definition
Syntax
The $mod
expression has the following syntax:
{ $mod: [ <expression1>, <expression2> ] }
The first argument is the dividend, and the second argument is the divisor. That is, the first argument is divided by the second argument.
Behavior
The arguments can be any valid expression as long as they resolve to numbers. For more information on expressions, see Expressions.
Starting in version 7.2, the output data type of the $mod
operator is
the larger of the two input data types.
Note
Prior to version 7.2, the value and field type of inputs determine
the $mod
output type if:
The divisor is type
double
but has an integer value.The dividend is type
int
orlong
.
In this case, MongoDB converts the divisor to the dividend data type before it performs the mod operation. The output data type is the dividend data type.
Negative Dividend
When the dividend is negative, the remainder is also negative. For more details on this behavior, see the official JavaScript documentation.
For an example, see Negative Dividend.
Example
Consider a conferencePlanning
collection with the following documents:
db.conferencePlanning.insertMany( [ { "_id" : 1, "city" : "New York", "hours" : 80, "tasks" : 7 }, { "_id" : 2, "city" : "Singapore", "hours" : 40, "tasks" : 4 } ] )
The following aggregation uses the $mod
expression to
return the remainder of the hours
field divided by the tasks
field:
db.conferencePlanning.aggregate( [ { $project: { remainder: { $mod: [ "$hours", "$tasks" ] } } } ] )
The operation returns the following results:
[ { '_id' : 1, 'remainder' : 3 }, { '_id' : 2, 'remainder' : 0 } ]
Negative Dividend
Consider a modExample
collection that contains the following
document:
db.modExample.insertOne( [ { "_id" : 1, "dividend": -13, "divisor": 9 } ] )
This aggregation uses the $mod
expression to return the remainder of
dividend
divided by the divisor
field:
db.modExample.aggregate( [ { $project: { remainder: { $mod: [ "$dividend", "$divisor" ] } } } ] )
The operation returns the following results:
[ { '_id' : 1, 'remainder' : -4 } ]