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 | Obligatorio / Opcional | Descripción | ||||||
|---|---|---|---|---|---|---|---|---|
Requerido | La fecha que se truncará, especificada en UTC. La fecha puede ser cualquier expresión que se resuelva en una fecha, una marca de tiempo o un ID de objeto. | |||||||
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 | |||||||
Opcional | El valor numérico de tiempo, especificado como una expresión que debe resolverse en un número positivo distinto de cero. El valor predeterminado 1 es. Juntos, binSize y unit especifican el período de tiempo utilizado en el | |||||||
Opcional | La zona horaria para el cálculo, Si no se proporciona ninguna zona horaria, el cálculo se realiza en
| |||||||
Opcional | El inicio de la semana. Se usa cuando la unidad startOfWeek es una expresión que debe resolverse en una de estas cadenas que no distinguen entre mayúsculas y minúsculas:
|
Comportamiento
Devuelve
nullsi:cualquiera de los campos de entrada excepto startOfWeek está ausente o establecido en
null, osi la unidad es
weeky startOfWeek falta o está configuradonullen.
Utiliza el calendario gregoriano proléptico para las fechas anteriores al 1583 año.
Tiene en cuenta el horario de verano, pero no los segundos intercalares.
binSize y unit Campos
Juntos, binSize y unit especifican el período de tiempo utilizado en el $dateTrunc cálculo.
Por ejemplo:
Si binSize es
1yhourla unidad es, el período de tiempo es una hora. Para la fecha,2021-03-20T11:30:05Z$dateTrunc2021-03-20T11:00:00Zdevuelve.Si binSize es
2yhourla unidad es, el período de tiempo es de dos horas. Para la fecha,2021-03-20T11:30:05Z$dateTrunc2021-03-20T10:00:00Zdevuelve.
Divide el tiempo para el
$dateTrunccálculo en períodos de tiempo binSize en la unidad de tiempo especificada.Los períodos de tiempo comienzan en una fecha de referencia, 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 la ISODate para el inicio de enero del 1 año en fecha.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:$dateTruncdevuelve la ISODate para el inicio 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 la 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: utiliza el domingo como inicio de la semana para el
$dateTrunccá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
Este ejemplo utiliza $dateTrunc en una etapa para truncar los valores de ventas de $project pasteles orderDate 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 la salida.$dateTrunctrunca elorderDatecampo a un2weekperíodo de tiempo de unidad binSize en laAmerica/Los_Angeleszona horaria con startOfWeek establecidoMondayen.
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 fechas de pedidos y obtener la suma de cantidades en una $group etapa de canalización
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_idcampo establecido en eltruncatedOrderDatecampo para agrupar loscakeSalesdocumentos y devuelve la suma de losquantityvalores para cada grupo$sumusando.$dateTrunctrunca elorderDatecampo a un6monthperíodo de tiempo de unidad binSize.
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 } ]