Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

$mul

Nesta página

  • Definição
  • Comportamento
  • Exemplos
$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 a notação de ponto.

A partir do MongoDB 5.0, mongod não gera mais um erro quando você usa um operador de atualização como $mul com uma expressão de operando vazia ( { } ). Uma atualização vazia não resulta em nenhuma alteração e nenhuma entrada no oplog é criada (o que significa que a operação é um 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.

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.

$mul é uma operação atômica dentro de um único documento.

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
Flutuador
Inteiro de 32 bits
Inteiro de 32 ou 64 bits
Inteiro de 64 bits
Flutuador
Inteiro de 64 bits
Inteiro de 64 bits
Inteiro de 64 bits
Flutuador
Flutuador
Flutuador
Flutuador
Flutuador

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.

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,25

  • quantity é o valor original, 25, multiplicado por 2

{ _id: 1, item: 'Hats', price: Decimal128("13.7375"), quantity: 50 }

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

Adicione o seguinte documento à coleção products:

db.products.insertOne( { _id: 3, item: "Scarf", price: Decimal128("10") } )

Na seguinte operação, db.collection.updateOne() utiliza 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.

Dica

Veja também:

← $max