$mod
Nesta página
Definição
Sintaxe
Para especificar uma expressão $mod
, use a seguinte sintaxe:
{ field: { $mod: [ divisor, remainder ] } }
Comportamento
O operador $mod
retorna um erro se a array [ divisor, remainder ]
contiver menos ou mais de dois elementos. Para obter exemplos, consulte Erro de elementos insuficientes e Erro de muitos elementos, respectivamente.
Além disso, a partir do MongoDB 5.1 (e 5.0.4), $mod
retorna um erro se os valores divisor
ou remainder
avaliarem para:
NaN
(não um número).Infinity
.Um valor que não pode ser representado utilizando um número inteiro de 64 bits.
Se um documento na collection contiver um campo onde o valor for NaN
(não um número) ou Infinity
, $mod
não inclui o documento no resultado.
Dividendo negativo
Quando o dividendo é negativo, o restante também é negativo. Para obter mais detalhes sobre esse comportamento,consulte a documentação oficial do JavaScript.
Para obter um exemplo, consulte Dividendo negativo.
Exemplos
Use $mod
para selecionar documentos
Criar uma collection inventory
:
db.inventory.insertMany( [ { "_id" : 1, "item" : "abc123", "qty" : 0 }, { "_id" : 2, "item" : "xyz123", "qty" : 5 }, { "_id" : 3, "item" : "ijk123", "qty" : 12 } ] )
Em seguida, a query a seguir seleciona os documentos na collection inventory
em que o valor do campo qty
módulo 4
é igual a 0
:
db.inventory.find( { qty: { $mod: [ 4, 0 ] } } )
A consulta retorna os seguintes documentos:
[ { '_id' : 1, 'item' : 'abc123', 'qty' : 0 }, { '_id' : 3, 'item' : 'ijk123', 'qty' : 12 } ]
Erro de elementos insuficientes
O operador $mod
apresenta erros quando recebe uma array com menos de dois elementos.
Array com elemento único
A operação a seguir passa incorretamente para o operador $mod
uma array que contém um único elemento:
db.inventory.find( { qty: { $mod: [ 4 ] } } )
A declaração resulta no seguinte erro:
MongoServerError: malformed mod, not enough elements
Array vazia
A operação a seguir passa incorretamente para o operador $mod
uma array vazia:
db.inventory.find( { qty: { $mod: [ ] } } )
A declaração resulta no seguinte erro:
MongoServerError: malformed mod, not enough elements
Erro de muitos elementos
O operador $mod
apresenta erro quando recebe uma array com mais de dois elementos.
Por exemplo, as seguintes tentativas de operação para utilizar o operador $mod
com uma array que contém quatro elementos:
db.inventory.find( { qty: { $mod: [ 4, 1, 2, 3 ] } } )
A declaração resulta no seguinte erro:
MongoServerError: malformed mod, too many elements
Argumentos de ponto flutuante
A expressão $mod
arredonda a entrada decimal para zero.
Os exemplos a seguir demonstram esse comportamento:
Exemplo
Query de entrada:
db.inventory.find( { qty: { $mod: [ 4.0, 0 ] } } )
Resultado:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]
Exemplo
Query de entrada:
db.inventory.find( { qty: { $mod: [ 4.5, 0 ] } } )
Resultado:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]
Exemplo
Query de entrada:
db.inventory.find( { qty: { $mod: [ 4.99, 0 ] } } )
Resultado:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]
Cada query aplica 4
na expressão $mod
independentemente dos pontos decimais, resultando no mesmo conjunto de resultados.
Dividendo negativo
A expressão $mod
produz um resultado negativo quando o dividendo é negativo.
Os exemplos a seguir demonstram esse comportamento:
Exemplo
Query de entrada:
db.inventory.find( { qty: { $mod: [ -4, -0 ] } } )
Essa consulta retorna dois documentos porque o qty
tem um restante de -0
quando o dividendo é negativo e -0
é igual a 0
em JavaScript. Para obter detalhes sobre essa igualdade, consulte a documentação oficial do JavaScript.
Resultado:
[ { _id: 1, item: 'abc123', qty: 0 }, { _id: 3, item: 'ijk123', qty: 12 } ]