MongoDB tem um
$mul
operador de atualização de campo que permite multiplicar um valor por um valor específico. Se o campo ainda não existir, ele será criado e seu valor será definido como zero (
0
) usando o mesmo tipo numérico que o multiplicador. Exemplo
Suponha que temos uma coleção com o seguinte documento:
{ "_id" : 1, "bar" : 10 }
Podemos usar o
$mul
operador em conjunto com o update()
método para incrementar a bar
campo. Assim:
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 2 } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Isso nos diz que um documento foi correspondido e modificado.
Vamos verificar a coleção novamente:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : 20 }
Podemos ver que o valor dobrou para 20.
Multiplicar um campo que não existe
Quando você usa
$mul
em um campo que não existe no documento, o campo é adicionado e definido como zero (0
) usando o mesmo tipo numérico que o multiplicador. Exemplo:
db.foo.update(
{ _id: 1 },
{ $mul: { bar: 3, extra: 2 } }
)
Saída:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Observe que atualizamos dois campos; a
bar
campo e o extra
campo (que não existia originalmente). Vamos verificar o documento novamente:
db.foo.find()
Resultado:
{ "_id" : 1, "bar" : 60, "extra" : 0 }
Podemos ver que a
bar
campo foi multiplicado por 3
, e um novo extra
campo foi adicionado e definido como 0
. Tipos mistos
A multiplicação com valores de tipos numéricos mistos (inteiro de 32 bits, inteiro de 64 bits, flutuante) pode resultar na conversão do tipo numérico.
Consulte a documentação do MongoDB para obter uma explicação.