Definition
$multiplyMultiplies numbers together and returns the result. Pass the arguments to
$multiplyin an array.The
$multiplyexpression has the following syntax:{ $multiply: [ <expression1>, <expression2>, ... ] } The arguments can be any valid expression as long as they resolve to numbers. For more information on expressions, see Expressions.
Starting in MongoDB 6.1 you can optimize the
$multiplyoperation. To improve performance, group references at the end of the argument list. For example,$multiply: [ 1, 2, 3, '$a', '$b', '$c' ]
Behavior
When input types are mixed, $multiply promotes the smaller input
type to the larger of the two. A type is considered larger when it
represents a wider range of values. The order of numeric types from
smallest to largest is: integer → long → double → decimal
The larger of the input types also determines the result type unless
the operation overflows and is beyond the range represented by that
larger data type. In cases of overflow, $multiply promotes the
result according to the following order:
Example
Consider a sales collection with the following documents:
db.sales.insertMany( [ { _id : 1, "item" : "abc", "price" : 10, "quantity": 2, date: ISODate("2014-03-01T08:00:00Z") }, { _id : 2, "item" : "jkl", "price" : 20, "quantity": 1, date: ISODate("2014-03-01T09:00:00Z") }, { _id : 3, "item" : "xyz", "price" : 5, "quantity": 10, date: ISODate("2014-03-15T09:00:00Z") } ] )
The following aggregation uses the $multiply expression
in the $project pipeline to multiply the price and the
quantity fields:
db.sales.aggregate( [ { $project: { date: 1, item: 1, total: { $multiply: [ "$price", "$quantity" ] } } } ] )
The operation returns the following results:
{ "_id" : 1, "item" : "abc", "date" : ISODate("2014-03-01T08:00:00Z"), "total" : 20 } { "_id" : 2, "item" : "jkl", "date" : ISODate("2014-03-01T09:00:00Z"), "total" : 20 } { "_id" : 3, "item" : "xyz", "date" : ISODate("2014-03-15T09:00:00Z"), "total" : 50 }