Definición
Sintaxis
La expresión $mod tiene la siguiente sintaxis:
{ $mod: [ <expression1>, <expression2> ] }
El primer argumento es el dividendo y el segundo argumento es el divisor. Es decir, el primer argumento se divide por el segundo argumento.
Comportamiento
Los argumentos pueden ser cualquier válido. expresión siempre que se resuelvan a números. Para obtener más información sobre las expresiones, consulta Expresiones.
A partir de la versión 7.2, el tipo de dato 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 del 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 es negativo. Para obtener más detalles sobre este comportamiento, véase documentación oficial de JavaScript.
Para un ejemplo, consulta 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 contenga 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 } ]