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 and unit Fields
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:$dateTruncreturns the ISODate for the start of January 1 for the year in 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:$dateTruncreturns the ISODate for the start of the first day of the month in date.week:$dateTruncreturns the ISODate for the start of the startOfWeek day in date. The default for startOfWeek is Sunday.day:$dateTruncreturns the ISODate for the start of the day in date.hour:$dateTruncreturns the ISODate for the start of the hour in date.minute:$dateTruncreturns the ISODate for the start of the minute in date.second:$dateTruncdevuelve el ISODate del inicio del segundo en fecha.
unit and startOfWeek Fields
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:
$projectincludes the_id,orderDate, andtruncatedOrderDatefields in the output.$dateTrunctruncates theorderDatefield to a2binSizeweekunit time period in theAmerica/Los_Angelestimezone with startOfWeek set toMonday.
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") } ]
Truncate Order Dates and Obtain Quantity Sum in a $group Pipeline Stage
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:
$grouphas the_idfield set to thetruncatedOrderDatefield to group thecakeSalesdocuments, and returns the sum of thequantityvalues for each group using$sum.$dateTrunctruncates theorderDatefield to a6binSizemonthunit time period.
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 } ]