Docs Menu
Docs Home
/ /
Campos

$mul

$mul

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

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

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

Para especificar un <field> en un documento incrustado o en una matriz, utilice 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, doble, 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 32bits
Entero de 64bits
Double
Decimal128

Entero de 32bits

Entero de 32bits o 64bits

Entero de 64bits

Double

Decimal128

Entero de 64bits

Entero de 64bits

Entero de 64bits

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$mulmultiplica 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, intentadb.collection.updateOne() $mul aplicar el operador a un campo que no está en el documento:

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

La db.collection.updateOne() operación

  • 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 para multiplicar el valor en $mul el price campo Decimal()12810 por Int():325

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