Definición
Nuevo en la versión 5.0.
Trunca una fecha.
$dateTrunc sintaxis:
{ $dateTrunc: { date: <Expression>, unit: <Expression>, binSize: <Expression>, timezone: <tzExpression>, startOfWeek: <Expression> } }
Campo | Requerido / Opcional | Descripción | ||||||
|---|---|---|---|---|---|---|---|---|
Requerido | La fecha a truncar, especificada en UTC. La fecha puede ser cualquier expresión que resuelva en una Fecha, un Sello de Tiempo o un ObjectID. | |||||||
Requerido | La unidad de tiempo, especificada como una expresión que debe resolverse en una de estas cadenas:
Juntos, binSize y unit especifican el período de tiempo utilizado en el cálculo de | |||||||
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 unit especifican el período de tiempo utilizado en el cálculo de | |||||||
Opcional | La zona horaria para el cálculo de Si no se proporciona ninguna zona horaria, el cálculo de
| |||||||
Opcional | El inicio de la semana. Se utiliza cuando unidad es startOfWeek es una expresión que debe resolverse en una de estas cadenas insensibles a mayúsculas y minúsculas:
|
Comportamiento
Retorna
nullsi:cualquiera de los campos de entrada excepto startOfWeek está ausente o establecido en
null, osi unidad es
weeky startOfWeek falta o está configurado ennull.
Utiliza el calendario gregoriano proléptico para fechas anteriores al año 1583.
Tiene en cuenta el horario de verano, pero no considera los segundos intercalares.
binSize y unit Campos
Juntos, binSize y unidad especifican el periodo de tiempo utilizado en el cálculo de $dateTrunc.
Por ejemplo:
Si binSize es
1y unit eshour, el periodo de tiempo es una hora. Para la fecha2021-03-20T11:30:05Z,$dateTruncdevuelve2021-03-20T11:00:00Z.Si binSize es
2y unidad eshour, el periodo de tiempo es de dos horas. Para la fecha2021-03-20T11:30:05Z,$dateTruncdevuelve2021-03-20T10:00:00Z.
Divide el tiempo para el cálculo
$dateTruncen 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,$dateTruncutiliza una fecha de referencia de2000-01-01T00:00:00.00Z. Por ejemplo, si binSize es10y unidad esyear, los periodos de tiempo de ejemplo son:2000-01-01T00:00:00.00Z2010-01-01T00:00:00.00Z2020-01-01T00:00:00.00Z
Igual a
week,$dateTruncutiliza una fecha de referencia que se establece en el primer día de la semana más temprano que sea igual o posterior a2000-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,$dateTruncestablece las partes menos significativas (determinadas por la unidad) de la ISODate devuelta en0y mantiene el resto de la ISODate igual.
Si unidad es:
year:$dateTruncdevuelve el ISODate para el inicio de enero 1 para el año en date.quarter:$dateTruncdevuelve el ISODate para el inicio del primer día del trimestre calendario en fecha.Los trimestres son:
De enero a marzo
Abril a junio
julio a septiembre
De octubre a diciembre
month:$dateTruncretorna el ISODate para el comienzo del primer día del mes en fecha.week:$dateTruncdevuelve la ISODate para el inicio del día startOfWeek en fecha. El valor por defecto para startOfWeek es domingo.day$dateTruncdevuelve el ISODate para el inicio del día en fecha.hour:$dateTruncdevuelve la ISODate para el inicio de la hora en fecha.minute:$dateTruncdevuelve la ISODate para el inicio del minuto en fecha.second:$dateTruncdevuelve el ISODate del inicio del segundo en fecha.
unit y startOfWeek Campos
Si unidad es:
Se ignora una string distinta de
week, startOfWeek.Es igual a
weeky startOfWeek es:Especificado:
$dateTruncutiliza startOfWeek como el primer día de la semana para el cálculo.Omitido:
$dateTruncusa los domingos como inicio de semana para el cálculo.
Ejemplos
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.
Truncar fechas de pedidos en una etapa de pipeline $project
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:
$projectincluye los campos_id,orderDateytruncatedOrderDateen el resultado.$dateTrunctrunca el campoorderDatea un periodo de tiempo2binSizeweekunit enAmerica/Los_Angelestimezone con startOfWeek establecido enMonday.
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") } ]
Truncar las fechas de pedido y obtener la suma total de la cantidad en una etapa de pipeline $group
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:
$grouptiene el campo_idconfigurado en el campotruncatedOrderDatepara agrupar los documentoscakeSales, y devuelve la suma de los valoresquantitypara cada grupo utilizando$sum.$dateTrunctrunca el campoorderDatea un período de tiempo binSize6unitmonth.
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 } ]