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
doublebut has an integer value.The dividend is type
intorlong.
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 } ]