Definición
$subtractResta 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.
La
$subtractLa 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 resuelvan en números y/o fechas. Para restar un número de una fecha, la fecha debe ser el primer argumento. Para más información sobre expresiones, consulte Expresiones.
Comportamiento
A partir de MongoDB 5.0, el resultado tendrá el mismo tipo que la entrada, excepto cuando no pueda representarse con precisión en ese tipo. En estos casos:
Un número entero de 32 bits se convertirá a un número entero de 64 bits si el resultado es representable como un número entero de 64 bits.
Un entero de 32 bits se convertirá en un double si el resultado no puede representarse como un entero de 64 bits.
Un entero de 64 bits se convertirá a double si el resultado no se puede representar como un entero de 64 bits.
Ejemplos
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") } ])
Reste números
La siguiente agregación utiliza la expresión $subtract para calcular el total restando el 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 }
Restar dos fechas
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, puedes utilizar el Date() para la fecha actual:s
db.sales.aggregate( [ { $project: { item: 1, dateDifference: { $subtract: [ new Date(), "$date" ] } } } ] )
Ambas operaciones devuelven documentos que se asemejan a los siguientes:
{ "_id" : 1, "item" : "abc", "dateDifference" : Long("186136746187") } { "_id" : 2, "item" : "jkl", "dateDifference" : Long("186133146187") }
Restar milisegundos a una fecha
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") }