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
/ /

$add (operador de expresión)

$add

Suma números o suma números y una fecha. Si uno de los argumentos es una fecha, $add trata los demás argumentos como milisegundos para agregar a la fecha.

La expresión $add tiene la siguiente sintaxis:

{ $add: [ <expression1>, <expression2>, ... ] }

Los argumentos pueden ser cualquier válido. expresión siempre que se resuelva todo en números o en números y una fecha. Para obtener más información sobre las expresiones, consulta Expresiones.

A partir de MongoDB 6.1 puedes optimizar la operación $add. Para mejorar el rendimiento, agrupa las referencias al final de la lista de argumentos. Por ejemplo,

$add: [ 1, 2, 3, '$a', '$b', '$c' ]

Cuando se mezclan los tipos de entrada, $add promueve el tipo de entrada menor al mayor de los dos. Un tipo se considera mayor cuando representa un rango más amplio de valores. El orden de los tipos numéricos, de menor a mayor, es: entero → largo → doble → decimal

El tipo de entrada mayor también determina el tipo de resultado, a menos que la operación se desborde y salga del rango representado por ese tipo de dato mayor. En casos de desbordamiento, $add promueve el resultado según el siguiente orden:

  • Si el tipo de entrada más grande es integer, el tipo de resultado se eleva a long.

  • Si el tipo de entrada más grande es long, el tipo de resultado se eleva a double.

  • Si el tipo mayor es double o decimal, el resultado del desbordamiento se representa como + o - infinito. No hay promoción de tipo del resultado.

Al mezclar Date y operandos que no son enteros, el operador $add evalúa el arreglo de expresiones de izquierda a derecha y redondea los valores numéricos antes de sumarlos al valor Date. Para obtener más información, consulte Agregar valores no enteros a una fecha.

Los siguientes ejemplos utilizan una colección sales con los siguientes documentos:

db.sales.insertMany( [
{ _id : 1, "item" : "abc", "price" : 10, "fee" : 2, date: ISODate("2014-03-01T08:00:00Z") },
{ _id : 2, "item" : "jkl", "price" : 20, "fee" : 1, date: ISODate("2014-03-01T09:00:00Z") },
{ _id : 3, "item" : "xyz", "price" : 5, "fee" : 0, date: ISODate("2014-03-15T09:00:00Z") }
] )

La siguiente agregación utiliza la expresión $add $project en la canalización para calcular el costo total:

db.sales.aggregate(
[
{ $project: { item: 1, total: { $add: [ "$price", "$fee" ] } } }
]
)

La operación devuelve los siguientes resultados:

{ "_id" : 1, "item" : "abc", "total" : 12 }
{ "_id" : 2, "item" : "jkl", "total" : 21 }
{ "_id" : 3, "item" : "xyz", "total" : 5 }

La siguiente agregación utiliza la $add expresión <a class=\" \" target=\" \" href=\" \"> para calcular el sumando billing_date 3*24*60*60000 milisegundos (es decir, 3 días) al campo date:

db.sales.aggregate(
[
{ $project: { item: 1, billing_date: { $add: [ "$date", 3*24*60*60000 ] } } }
]
)

La operación devuelve los siguientes resultados:

{ "_id" : 1, "item" : "abc", "billing_date" : ISODate("2014-03-04T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "billing_date" : ISODate("2014-03-04T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "billing_date" : ISODate("2014-03-18T09:00:00Z") }

La siguiente agregación utiliza la expresión $add para calcular el campo result añadiendo valores numéricos al campo date:

db.sales.aggregate(
[
{ $project: { item: 1, result: { $add: [ 1.5, 1.6, "$date", 1.5, 1.5 ] } } }
]
)
{ "_id" : 1, "item" : 'abc', "result" : ISODate("2014-03-01T08:00:00.007Z") }
{ "_id" : 2, "item" : 'jkl', "result" : ISODate("2014-03-01T09:00:00.007Z") }
{ "_id" : 3, "item" : 'xyz', "result" : ISODate("2014-03-15T09:00:00.007Z") }

Tenga en cuenta que, aunque la suma de expresiones que no son de fecha es 6.1 milisegundos, la agregación da como resultado el campo inicial $date más 7 milisegundos debido a la asociatividad izquierda de la operación $add.

Cuando $add evalúa el arreglo de expresiones de izquierda a derecha, primero suma los dos valores numéricos 1.5 y 1.6. El 3.1 resultante se redondea a 3 antes de añadirse al campo $date. A continuación, siguiente, se suma al valor redondeado del 1.5 (que es 2), y luego al valor redondeado del 1.5 final (que también es 2).

Volver

$acosh

En esta página