Docs Menu
Docs Home
/ /

$mod

$mod

Selecciona documentos donde el valor de un campo dividido por un divisor tenga el resto especificado. Es decir, $mod realiza una operación de módulo para seleccionar documentos. El primer argumento es el dividendo y el segundo, el resto.

Para especificar una expresión $mod, utilice la siguiente sintaxis:

{ field: { $mod: [ divisor, remainder ] } }

$mod Devuelve un error si la matriz [ divisor, remainder ] no contiene dos elementos. Para ver ejemplos, consulte Error de elementos insuficientes y error de elementos excesivos respectivamente.

Además, a partir de MongoDB 5.1 (y 5.0.4), $mod devuelve un error si los valores de divisor o remainder se evalúan como:

  • NaN (no es un número).

  • Infinity.

  • Un valor que no se puede representar utilizando un entero de 64bits.

Si un documento en la colección contiene un campo cuyo valor es NaN (no es un número) o Infinity, $mod no incluye el documento en la salida.

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.

Crear una colección inventory:

db.inventory.insertMany( [
{ _id: 1, item: "abc123", qty: 0 },
{ _id: 2, item: "xyz123", qty: 5 },
{ _id: 3, item: "ijk123", qty: 12 }
] )

Luego, la siguiente consulta selecciona aquellos documentos en la colección inventory donde el valor del campo qty módulo 4 es igual a 0:

db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )

La query devuelve los siguientes documentos:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

El $mod operador genera errores cuando se le pasa una matriz con menos de dos elementos.

La siguiente operación pasa incorrectamente el operador a una matriz que contiene un solo $mod elemento:

db.inventory.find( { qty: { $mod: [ 4 ] } } )

La declaración da como resultado el siguiente error:

MongoServerError: malformed mod, not enough elements

La siguiente operación pasa incorrectamente el operador a una matriz $mod vacía:

db.inventory.find( { qty: { $mod: [ ] } } )

La declaración da como resultado el siguiente error:

MongoServerError: malformed mod, not enough elements

El operador genera errores cuando se le pasa una matriz con más de dos $mod elementos.

Por ejemplo, la siguiente operación intenta utilizar el operador con una matriz que contiene cuatro $mod elementos:

db.inventory.find( { qty: { $mod: [ 4, 1, 2, 3 ] } } )

La declaración da como resultado el siguiente error:

MongoServerError: malformed mod, too many elements

La expresión $mod redondea la entrada decimal hacia cero.

Los siguientes ejemplos demuestran este comportamiento:

Ejemplo

Consulta de entrada:

db.inventory.find( { qty: { $mod: [ 4.0, 0 ] } } )

Resultados:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

Ejemplo

Consulta de entrada:

db.inventory.find( { qty: { $mod: [ 4.5, 0 ] } } )

Resultados:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

Ejemplo

Consulta de entrada:

db.inventory.find( { qty: { $mod: [ 4.99, 0 ] } } )

Resultados:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

Cada consulta aplica 4 a la expresión $mod independientemente de los puntos decimales, lo que da como resultado el mismo conjunto de resultados.

La expresión $mod produce un resultado negativo cuando el dividendo es negativo.

El siguiente ejemplo demuestra este comportamiento:

Ejemplo

Consulta de entrada:

db.inventory.find( { qty: { $mod: [ -4, -0 ] } } )

Esta consulta devuelve dos documentos porque qty tiene un resto de -0 cuando el dividendo es negativo y es -0 igual a 0 en JavaScript. Para más detalles sobre esta igualdad, consulte la documentación oficial de JavaScript.

Resultados:

[
{ _id: 1, item: 'abc123', qty: 0 },
{ _id: 3, item: 'ijk123', qty: 12 }
]

Volver

$jsonSchema

En esta página