Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
Docs Menu

$dateTrunc (operador de expresión)

$dateTrunc

Novedad 5.0 en la versión.:

Trunca una fecha.

$dateTrunc sintaxis:

{
$dateTrunc: {
date: <Expression>,
unit: <Expression>,
binSize: <Expression>,
timezone: <tzExpression>,
startOfWeek: <Expression>
}
}
Campo
Requerido / Opcional
Descripción

Requerido

La fecha que se va a truncar, especificada en UTC. El date puede ser cualquier expresión que resuelva a una Fecha, una Marca de tiempo o un ObjectId.

Requerido

La unidad de tiempo, especificada como una expresión que debe resolverse en una de estas cadenas:

  • year

  • quarter

  • week

  • month

  • day

  • hour

  • minute

  • second

Juntos, binSize y unidad especifican el periodo de tiempo utilizado en el cálculo de $dateTrunc.

Opcional

El valor numérico de tiempo, especificado como una expresión que debe resolverse en un número positivo distinto de cero. Por defecto es 1.

Juntos, binSize y unidad especifican el periodo de tiempo utilizado en el cálculo de $dateTrunc.

Opcional

La zona horaria para el cálculo $dateTrunc, especificada como una expresión que debe resolverse en una string que contenga uno de estos valores:

Si no se proporciona ninguna zona horaria, el cálculo de $dateTrunc se realiza en UTC.

Formato
Ejemplos

Identificador de zona horaria Olson

  • America/New_York

  • Europe/London

  • GMT

Desplazamiento UTC

  • +/-[hh]:[mm] (ejemplo, +04:45)

  • +/-[hh][mm] (ejemplo, -0530)

  • +/-[hh] (ejemplo, +03)

Opcional

El comienzo de la semana. Se utiliza cuando unit es week. El valor por defecto es Sunday.

startOfWeek es una expresión que debe resolverse en una de estas cadenas insensibles a mayúsculas y minúsculas:

  • monday (o mon)

  • tuesday (o tue)

  • wednesday (o wed)

  • thursday (o thu)

  • friday (o fri)

  • saturday (o sat)

  • sunday (o sun)

$dateTrunc:

Juntos, binSize y unidad especifican el periodo de tiempo utilizado en el cálculo de $dateTrunc.

Por ejemplo:

  • Si binSize es 1 y unit es hour, el periodo de tiempo es una hora. Para la fecha 2021-03-20T11:30:05Z, $dateTrunc devuelve 2021-03-20T11:00:00Z.

  • Si binSize es 2 y unidad es hour, el periodo de tiempo es de dos horas. Para la fecha 2021-03-20T11:30:05Z, $dateTrunc devuelve 2021-03-20T10:00:00Z.

$dateTrunc:

  • Divide el tiempo para el cálculo $dateTrunc en períodos de tiempo llamados binSize en la unidadde tiempo especificada.

    Los períodos de tiempo comienzan en una fecha de referencia, que se determina por unidad. Si la unidad es:

    • Una cadena distinta de week, $dateTrunc utiliza una fecha de referencia de 2000-01-01T00:00:00.00Z. Por ejemplo, si binSize es 10 y unidad es year, los periodos de tiempo de ejemplo son:

      • 2000-01-01T00:00:00.00Z

      • 2010-01-01T00:00:00.00Z

      • 2020-01-01T00:00:00.00Z

    • Igual a week, $dateTrunc utiliza una fecha de referencia que se establece en el primer día de la semana más temprano que sea igual o posterior a 2000-01-01. El primer día se establece usando startOfWeek (el valor por defecto es domingo).

  • Devuelve el límite inferior del periodo de tiempo en el que se encuentra la fecha. El límite se devuelve como un ISODate. Si el campo binSize es 1, $dateTrunc establece las partes menos significativas (determinadas por la unidad) de la ISODate devuelta en 0 y mantiene el resto de la ISODate igual.

Si unidad es:

Si unidad es:

Crea una colección de cakeSales que incluya ventas de pasteles en el estado de California (CA) y Washington (WA):

db.cakeSales.insertMany( [
{ _id: 0, type: "chocolate", orderDate: new Date("2020-05-18T14:10:30Z"),
state: "CA", price: 13, quantity: 120 },
{ _id: 1, type: "chocolate", orderDate: new Date("2021-03-20T11:30:05Z"),
state: "WA", price: 14, quantity: 140 },
{ _id: 2, type: "vanilla", orderDate: new Date("2021-01-11T06:31:15Z"),
state: "CA", price: 12, quantity: 145 },
{ _id: 3, type: "vanilla", orderDate: new Date("2020-02-08T13:13:23Z"),
state: "WA", price: 13, quantity: 104 },
{ _id: 4, type: "strawberry", orderDate: new Date("2019-05-18T16:09:01Z"),
state: "CA", price: 41, quantity: 162 },
{ _id: 5, type: "strawberry", orderDate: new Date("2019-01-08T06:12:03Z"),
state: "WA", price: 43, quantity: 134 }
] )

La colección cakeSales se utiliza en los siguientes ejemplos.

En este ejemplo, se utiliza $dateTrunc en una etapa $project para truncar los valores de orderDate de ventas de pasteles a dos semanas:

db.cakeSales.aggregate( [
{
$project: {
_id: 1,
orderDate: 1,
truncatedOrderDate: {
$dateTrunc: {
date: "$orderDate", unit: "week", binSize: 2,
timezone: "America/Los_Angeles", startOfWeek: "Monday"
}
}
}
}
] )

En el ejemplo:

  • $project incluye los campos _id, orderDate y truncatedOrderDate en el resultado.

  • $dateTrunc trunca el campo orderDate a un periodo de tiempo 2 binSize week unit en America/Los_Angeles timezone con startOfWeek establecido en Monday.

En este resultado de ejemplo, el orderDate truncado se muestra en el campo truncatedOrderDate:

[
{
_id: 0,
orderDate: ISODate("2020-05-18T14:10:30.000Z"),
truncatedOrderDate: ISODate("2020-05-11T07:00:00.000Z")
},
{
_id: 1,
orderDate: ISODate("2021-03-20T11:30:05.000Z"),
truncatedOrderDate: ISODate("2021-03-15T07:00:00.000Z")
},
{
_id: 2,
orderDate: ISODate("2021-01-11T06:31:15.000Z"),
truncatedOrderDate: ISODate("2021-01-04T08:00:00.000Z")
},
{
_id: 3,
orderDate: ISODate("2020-02-08T13:13:23.000Z"),
truncatedOrderDate: ISODate("2020-02-03T08:00:00.000Z")
},
{
_id: 4,
orderDate: ISODate("2019-05-18T16:09:01.000Z"),
truncatedOrderDate: ISODate("2019-05-13T07:00:00.000Z")
},
{
_id: 5,
orderDate: ISODate("2019-01-08T06:12:03.000Z"),
truncatedOrderDate: ISODate("2019-01-07T08:00:00.000Z")
}
]

Este ejemplo utiliza $dateTrunc en una etapa $group para truncar los valores orderDate de ventas de pasteles a seis meses y devolver la suma de los valores quantity:

db.cakeSales.aggregate( [
{
$group: {
_id: {
truncatedOrderDate: {
$dateTrunc: {
date: "$orderDate", unit: "month", binSize: 6
}
}
},
sumQuantity: { $sum: "$quantity" }
}
}
] )

En el ejemplo:

  • $group tiene el campo _id configurado en el campo truncatedOrderDate para agrupar los documentos cakeSales, y devuelve la suma de los valores quantity para cada grupo utilizando $sum.

  • $dateTrunc trunca el campo orderDate a un período de tiempo binSize 6 unit month.

En este ejemplo de salida, el orderDate truncado se muestra en el campo truncatedOrderDate y la suma quantity se muestra en el campo sumQuantity:

[
{
_id: { truncatedOrderDate: ISODate("2020-01-01T00:00:00.000Z") },
sumQuantity: 224
},
{
_id: { truncatedOrderDate: ISODate("2021-01-01T00:00:00.000Z") },
sumQuantity: 285
},
{
_id: { truncatedOrderDate: ISODate("2019-01-01T00:00:00.000Z") },
sumQuantity: 296
}
]