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 se realiza en
| |||||||
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
Devuelve
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 las fechas anteriores al 1583 año.
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 periodos de tiempo comienzan en una fecha de referencia, que es determinada 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 período de tiempo en el que se encuentra la fecha. El límite se devuelve como una ISODate. Si el campo binSize
1es, establece las partes$dateTruncmenos significativas (determinadas por la unidad) de la0ISODate devuelta en y mantiene el resto de la ISODate sin cambios.
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 cuartos son:
Enero a marzo
Abril a junio
julio a septiembre
Octubre a diciembre
month:$dateTruncretorna el ISODate para el comienzo del primer día del mes en fecha.week:$dateTruncdevuelve la fecha ISODate del inicio del día de startOfWeek en la fecha. El valor predeterminado 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 la fecha.minute:$dateTruncdevuelve la ISODate para el inicio del minuto en la fecha.second:$dateTruncdevuelve el ISODate del inicio del segundo en fecha.
unit y startOfWeek Campos
Si unidad es:
Una cadena distinta
weekde, startOfWeek se ignora.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 para truncar los valores de ventas de $group pasteles orderDate a seis meses y devolver la suma de los quantity valores:
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 } ]