Docs Menu
Docs Home
/ /

$subtract (operador de expresión)

$subtract

Resta dos números para devolver la diferencia, o dos fechas para devolver la diferencia en milisegundos, o una fecha y un número en milisegundos para devolver la fecha resultante.

El $subtract La expresión tiene la siguiente sintaxis:

{ $subtract: [ <expression1>, <expression2> ] }

El segundo argumento se resta del primer argumento.

Los argumentos pueden ser cualquier válido. Expresión, siempre que se resuelvan en números o fechas. Para restar un número a una fecha, la fecha debe ser el primer argumento. Para más información sobre expresiones, consulte Expresiones.

Cuando se mezclan los tipos de entrada, $subtract 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, $subtract 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 operandos y no Date enteros, $subtract redondea el valor no entero al entero más cercano antes de realizar la operación.

Considera una colección sales con los siguientes documentos:

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

La siguiente agregación utiliza la expresión para $subtract calcular total restando discount del subtotal de price y.fee

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

La operación devuelve los siguientes resultados:

{ "_id" : 1, "item" : "abc", "total" : 7 }
{ "_id" : 2, "item" : "jkl", "total" : 19 }

La siguiente agregación utiliza la expresión para $subtract restar $date de la fecha actual, utilizando el sistema y ​​devuelve la diferencia en NOW milisegundos:

db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ "$$NOW", "$date" ] } } } ] )

Alternativamente, puede utilizar para la fecha Date() actual:

db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ new Date(), "$date" ] } } } ] )

Ambas operaciones devuelven documentos que se parecen a los siguientes:

{ "_id" : 1, "item" : "abc", "dateDifference" : Long("186136746187") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : Long("186133146187") }

La siguiente agregación utiliza la expresión para $subtract restar 5 * 60 * 1000 milisegundos (5 minutos) del campo "$date":

db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ "$date", 5 * 60 * 1000 ] } } } ] )

La operación devuelve los siguientes resultados:

{ "_id" : 1, "item" : "abc", "dateDifference" : ISODate("2014-03-01T07:55:00Z") }
{ "_id" : 2, "item" : "jkl", "dateDifference" : ISODate("2014-03-01T08:55:00Z") }

Volver

$substrCP

En esta página