Definición
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:
Juntos, binSize y unidad especifican el periodo 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 unidad especifican el periodo de tiempo utilizado en el cálculo de | |||||||
Opcional | La zona horaria para el cálculo Si no se proporciona ninguna zona horaria, el cálculo de
| |||||||
Opcional | El comienzo de la semana. Se utiliza cuando unit 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).
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.
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 } ]