Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / / /

$mod

Nesta página

  • Definição
  • Sintaxe
  • Comportamento
  • Exemplos
$mod

Selecione documentos em que o valor de um campo dividido por um divisor tenha o resto especificado. Ou seja, o $mod executa uma operação de módulo para selecionar documentos. O primeiro argumento é o dividendo, e o segundo argumento é o resto.

Para especificar uma expressão $mod, use a seguinte sintaxe:

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

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.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.

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.

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 }
]

O operador $mod apresenta erros quando recebe uma array com menos de dois elementos.

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

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

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

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.

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 }
]

Voltar

$jsonSchema