$mul
Nesta página
Definição
$mul
Multiplique o valor de um campo por um número. Para especificar uma expressão
$mul
, use o seguinte protótipo:{ $mul: { <field1>: <number1>, ... } } O campo a atualizar deve conter um valor numérico.
Para especificar um
<field>
em um documento incorporado ou em uma array, use notação de ponto de ponto.
Comportamento
A partir do MongoDB 5.0, mongod
não gera mais um erro ao usar um operador de atualização como $mul
com uma expressão de operando vazia ( { }
). Uma atualização vazia não resulta em alteração e nenhuma entrada no oplog é criada (o que significa que é sem operação).
A partir do MongoDB 5.0, os operadores de atualização processam campos de documento com nomes baseados em cadeia de caracteres em ordem lexicográfica. Os campos com nomes numéricos são processados em ordem numérica. Consulte Atualizar Comportamento de Operadores para detalhes.
Campo ausente
Se o campo não existir em um documento, $mul
criará o campo e definirá o valor como zero do mesmo tipo numérico do multiplicador.
Atômico
$mul
é uma operação atômica dentro de um único documento.
Tipo misto
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. Para multiplicação com valores de tipos numéricos mistos, as seguintes regras de conversão de tipo se aplicam:
Inteiro de 32 bits | Inteiro de 64 bits | Float | |
---|---|---|---|
Inteiro de 32 bits | Inteiro de 32 ou 64 bits | Inteiro de 64 bits | Float |
Inteiro de 64 bits | Inteiro de 64 bits | Inteiro de 64 bits | Float |
Float | Float | Float | Float |
Observação
Se o produto de dois números inteiros de 32 bits exceder o valor máximo para um número inteiro de 32 bits, o resultado será um número inteiro de 64 bits.
Operações inteiras de qualquer tipo que excedam o valor máximo para um número inteiro de 64 bits produzem um erro.
Exemplos
Multiplicar o valor de um campo
Crie a coleção products
:
db.products.insertOne( { "_id" : 1, "item" : "Hats", "price" : Decimal128("10.99"), "quantity" : 25 } )
Na seguinte operação, db.collection.updateOne()
atualiza o documento. O operador $mul
multiplica o campo price
por 1.25
e o campo quantity
por 2
:
db.products.updateOne( { _id: 1 }, { $mul: { price: Decimal128( "1.25" ), quantity: 2 } } )
No documento atualizado:
price
é o valor original, 10,99, multiplicado por 1,25quantity
é o valor original, 25, multiplicado por 2
{ _id: 1, item: 'Hats', price: Decimal128("13.7375"), quantity: 50 }
Aplicar $mul
o operador a um campo não existente
Adicione o seguinte documento à coleção products
:
db.products.insertOne( { _id: 2, item: "Unknown" } )
Na operação a seguir, db.collection.updateOne()
tenta aplicar o operador $mul
em um campo que não está no documento:
db.products.updateOne( { _id: 2 }, { $mul: { price: Decimal128("100") } } )
A operação db.collection.updateOne()
insere o campo
price
define Decimal128("0")
{ "_id" : 2, "item" : "Unknown", "price" : NumberLong(0) }
O campo price
tem o mesmo tipo, Decimal128, como o multiplicador.
Multiplicar tipos numéricos mistos
Adicione o seguinte documento à coleção products
:
db.products.insertOne( { _id: 3, item: "Scarf", price: Decimal128("10") } )
Na operação a seguir, db.collection.updateOne()
usa o operador $mul
para multiplicar o valor no campo price
Decimal128(10) por Int32(5):
db.products.updateOne( { _id: 3 }, { $mul: { price: Int32(5) } } )
A operação resulta no seguinte documento:
{ _id: 3, item: 'Scarf', price: Decimal128("50") }
O valor no campo price
é do tipo Decimal128. Consulte Regras de conversão de tipo de multiplicação para obter detalhes.