$mul (original) (raw)

$mul

Multiply the value of a field by a number. To specify a$mul expression, use the following prototype:


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

The field to update must contain a numeric value.

To specify a <field> in an embedded document or in an array, usedot notation.

Starting in MongoDB 5.0, mongod no longer raises an error when you use an update operator like $mulwith 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).

Starting in MongoDB 5.0, update operators process document fields with string-based names in lexicographic order. Fields with numeric names are processed in numeric order. See Update Operators Behavior for details.

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.

$mul is an atomic operation within a single document.

Multiplication with values of mixed numeric types (32-bit integer, 64-bit integer, float) may result in conversion of numeric type. For multiplication with values of mixed numeric types, the following type conversion rules apply:

32-bit Integer 64-bit Integer Float
32-bit Integer 32-bit or 64-bit Integer 64-bit Integer Float
64-bit Integer 64-bit Integer 64-bit Integer Float
Float Float Float Float

Note

Create the products collection:


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 pricefield by 1.25 and the quantity field by 2:


db.products.updateOne(

   { _id: 1 },

   { $mul:

      {

         price: Decimal128( "1.25" ),

         quantity: 2

       }

   }

)

In the updated document:


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

Add the following document to the products collection:


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") } }

)

The db.collection.updateOne() operation


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

The price field has the same type, Decimal128, as the multiplier.

Add the following document to the products collection:


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 pricefield Decimal128(10) by Int32(5):


db.products.updateOne(

   { _id: 3 },

   { $mul: { price: Int32(5) } }

)

The operation results in the following document:


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

The value in the price field is of type Decimal128. See Multiplication Type Conversion Rules for details.

See also: