$mod¶
On this page
-
$mod
¶ Select documents where the value of a field divided by a divisor has the specified remainder (i.e. perform a modulo operation to select documents). To specify a
$mod
expression, use the following syntax:{ field: { $mod: [ divisor, remainder ] } }
Changed in version 2.6: The
$mod
operator errors when passed an array with fewer or more elements. In previous versions, if passed an array with one element, the$mod
operator uses0
as the remainder value, and if passed an array with more than two elements, the$mod
ignores all but the first two elements. Previous versions do return an error when passed an empty array. See Not Enough Elements Error and Too Many Elements Error for details.
Examples¶
Use $mod
to Select Documents¶
Consider a collection inventory
with the following documents:
{ "_id" : 1, "item" : "abc123", "qty" : 0 }
{ "_id" : 2, "item" : "xyz123", "qty" : 5 }
{ "_id" : 3, "item" : "ijk123", "qty" : 12 }
Then, the following query selects those documents in the
inventory
collection where value of the qty
field modulo
4
equals 0
:
db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )
The query returns the following documents:
{ "_id" : 1, "item" : "abc123", "qty" : 0 }
{ "_id" : 3, "item" : "ijk123", "qty" : 12 }
Not Enough Elements Error¶
The $mod
operator errors when passed an array with fewer than
two elements.
Array with Single Element¶
The following operation incorrectly passes the $mod
operator
an array that contains a single element:
db.inventory.find( { qty: { $mod: [ 4 ] } } )
The statement results in the following error:
error: {
"$err" : "bad query: BadValue malformed mod, not enough elements",
"code" : 16810
}
Changed in version 2.6: In previous versions, if passed an array with one element, the
$mod
operator uses the specified element as the divisor
and 0
as the remainder value.
Empty Array¶
The following operation incorrectly passes the $mod
operator
an empty array:
db.inventory.find( { qty: { $mod: [ ] } } )
The statement results in the following error:
error: {
"$err" : "bad query: BadValue malformed mod, not enough elements",
"code" : 16810
}
Changed in version 2.6: Previous versions returned the following error:
error: { "$err" : "mod can't be 0", "code" : 10073 }
Too Many Elements Error¶
The $mod
operator errors when passed an array with more than
two elements.
For example, the following operation attempts to use the $mod
operator with an array that contains four elements:
error: {
"$err" : "bad query: BadValue malformed mod, too many elements",
"code" : 16810
}
Changed in version 2.6: In previous versions, if passed an array with more than two
elements, the $mod
ignores all but the first two
elements.