Docs Menu
Docs Home
/ /
Operadores de tuberías de agregación

$subtract (agregació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.

La expresión $subtract 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.

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 entero de 32bits se convertirá en un entero de 64bits si el resultado se puede representar como un entero de 64bits.

  • Un entero de 32bits se convertirá en un doble si el resultado no se puede representar como un entero de 64bits.

  • Un entero de 64bits se convertirá en doble si el resultado no se puede representar como un entero de 64bits.

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