Definição
$mulMultiplique 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, Double, Decimal128) 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:
Tipo de Dados | Inteiro de 32 bits | Inteiro de 64 bits | Double | Decimal128 |
|---|---|---|---|---|
Inteiro de 32 bits | Inteiro de 32 ou 64 bits | Inteiro de 64 bits | Double | Decimal128 |
Inteiro de 64 bits | Inteiro de 64 bits | Inteiro de 64 bits | Double | Decimal128 |
Double | Double | Double | Double | Decimal128 |
Decimal128 | Decimal128 | Decimal128 | Decimal128 | Decimal128 |
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 o operador $mul 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
pricedefine Decimal128("0")
{ "_id" : 2, "item" : "Unknown", "price" : Long(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.