Definición
Sintaxis
La expresión $mod tiene la siguiente sintaxis:
{ $mod: [ <expression1>, <expression2> ] }
El primer argumento es el dividendo y el segundo, el divisor. Es decir, el primer argumento se divide entre el segundo.
Comportamiento
Los argumentos pueden ser cualquier válido. expresión siempre que se resuelvan en números. Para más información sobre expresiones, consulte Expresiones.
A partir de la versión 7.2, el tipo de datos de salida del operador $mod es el mayor de los dos tipos de datos de entrada.
Nota
Antes de la versión 7.2, el valor y el tipo de campo de las entradas determinan el tipo de salida $mod si:
El divisor es de tipo
doublepero tiene un valor entero.El dividendo es de tipo
intolong.
En este caso, MongoDB convierte el divisor al tipo de dato dividendo antes de realizar la operación $mod. El tipo de dato de salida es el tipo de dato dividendo.
Dividendo negativo
Cuando el dividendo es negativo, el resto también lo es. Para más detalles sobre este comportamiento, consulte la documentación oficial de JavaScript..
Para ver un ejemplo, consulte Dividendo negativo.
Ejemplo
Considera una colección conferencePlanning con los siguientes documentos:
db.conferencePlanning.insertMany( [ { "_id" : 1, "city" : "New York", "hours" : 80, "tasks" : 7 }, { "_id" : 2, "city" : "Singapore", "hours" : 40, "tasks" : 4 } ] )
La siguiente agregación utiliza la expresión $mod para devolver el resto del campo hours dividido por el campo tasks:
db.conferencePlanning.aggregate( [ { $project: { remainder: { $mod: [ "$hours", "$tasks" ] } } } ] )
La operación devuelve los siguientes resultados:
[ { '_id' : 1, 'remainder' : 3 }, { '_id' : 2, 'remainder' : 0 } ]
Dividendo negativo
Considere una colección modExample que contiene el siguiente documento:
db.modExample.insertOne( [ { "_id" : 1, "dividend": -13, "divisor": 9 } ] )
Esta agregación utiliza la expresión $mod para devolver el resto de dividend dividido por el campo divisor:
db.modExample.aggregate( [ { $project: { remainder: { $mod: [ "$dividend", "$divisor" ] } } } ] )
La operación devuelve los siguientes resultados:
[ { '_id' : 1, 'remainder' : -4 } ]