Definição
$mulMultiply the value of a field by a number. To specify a
$mulexpression, use the following prototype:{ $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 a notação de ponto.
Comportamento
Starting in MongoDB 5.0, mongod no longer raises an error when you use an update operator like $mul with an empty operand expression ( { } ). An empty update results in no changes and no oplog entry is created (meaning that the operation is a no-op).
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
If the field does not exist in a document, $mul creates the field and sets the value to zero of the same numeric type as the multiplier.
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 } )
In the following operation, db.collection.updateOne() updates the document. The $mul operator multiplies the price field by 1.25 and the quantity field by 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" } )
In the following operation, db.collection.updateOne() attempts to apply the $mul operator to a field that is not in the document:
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") } )
In the following operation, db.collection.updateOne() uses the $mul operator to multiply the value in the price field Decimal128(10) by 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") }
The value in the price field is of type Decimal128. See Multiplication Type Conversion Rules for details.