Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

$mul (operador de actualización)

$mul

Multiplica el valor de un campo por un número. Para especificar un $mul expresión, utilice el siguiente prototipo:

{ $mul: { <field1>: <number1>, ... } }

El campo a actualizar debe contener un valor numérico.

Para especificar un <field> en un documento incrustado o en un arreglo, utiliza notación de puntos.

A partir de MongoDB 5.0, mongod ya no genera un error cuando utiliza un operador de actualización como $mul con una expresión de operando vacía ( { } ). Una actualización vacía no produce cambios y no genera ninguna entrada en el oplog (lo que significa que la operación es una “no-op").

A partir de MongoDB 5.0, los operadores de actualización procesan los campos de documentos con nombres basados en cadenas en orden lexicográfico. Los campos con nombres numéricos se procesan en orden numérico. Consulta Comportamiento del operador de actualización para obtener más información.

Si el campo no existe en un documento, $mul crea el campo y establece el valor en cero de mismo tipo numérico que el multiplicador.

$mul es una operación atómica dentro de un único documento.

La multiplicación con valores de tipos numéricos mixtos (entero de 32bits, entero de 64bits, Double, Decimal128) puede resultar en la conversión del tipo numérico. Para la multiplicación con valores de tipos numéricos mixtos, se aplican las siguientes reglas de conversión de tipos:

Tipo de dato
entero de 32 bits
entero de 64 bits
Double
Decimal128

entero de 32 bits

Entero de 32 bits o 64 bits

entero de 64 bits

Double

Decimal128

entero de 64 bits

entero de 64 bits

entero de 64 bits

Double

Decimal128

Double

Double

Double

Double

Decimal128

Decimal128

Decimal128

Decimal128

Decimal128

Decimal128

Nota

  • Si el producto de dos enteros de 32 bits supera el valor máximo para un entero de 32 bits, el resultado será un entero de 64 bits.

  • Las operaciones con enteros de cualquier tipo que superen el valor máximo para un entero de 64 bits generan un error.

Crear la colección products:

db.products.insertOne(
{ "_id" : 1, "item" : "Hats", "price" : Decimal128("10.99"), "quantity" : 25 }
)

En la siguiente operación, db.collection.updateOne() actualiza el documento. El operador $mul multiplica el campo price por 1.25 y el campo quantity por 2:

db.products.updateOne(
{ _id: 1 },
{ $mul:
{
price: Decimal128( "1.25" ),
quantity: 2
}
}
)

En el documento actualizado:

  • price es el valor original, 10,99, multiplicado por 1,25

  • quantity es el valor original, 25, multiplicado por 2

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

Añada el siguiente documento a la colección products:

db.products.insertOne( { _id: 2, item: "Unknown" } )

En la siguiente operación, db.collection.updateOne() intentó aplicar el operador $mul a un campo que no se encuentra en el documento:

db.products.updateOne(
{ _id: 2 },
{ $mul: { price: Decimal128("100") } }
)

La operación db.collection.updateOne()

  • inserta el campo price

  • establece Decimal128("0")

{ "_id" : 2, "item" : "Unknown", "price" : Long(0) }

El campo price tiene el mismo tipo, Decimal128, que el multiplicador.

Añada el siguiente documento a la colección products:

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

En la siguiente operación, db.collection.updateOne() utiliza el operador $mul para multiplicar el valor del campo price Decimal128(10) por Int32(5):

db.products.updateOne(
{ _id: 3 },
{ $mul: { price: Int32(5) } }
)

La operación produce el siguiente documento:

{ _id: 3, item: 'Scarf', price: Decimal128("50") }

El valor del price campo es de tipo decimal.128 Consulte las reglas de conversión de tipos de multiplicación para obtener más información.

Tip

Volver

$max

En esta página