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 se resuelva en una fecha, una marca de tiempo o un identificador de objeto. | |||||||
Requerido | La unidad de tiempo, especificada como una expresión que debe resolverse en una de estas cadenas:
En conjunto, 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. Por defecto es 1. En conjunto, binSize y unit especifican el período de tiempo utilizado en el | |||||||
Opcional | La zona horaria para el cálculo, Si no se proporciona una zona horaria, el cálculo se realiza en
| |||||||
Opcional | El comienzo 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
Retorna
nullsi:Cualquiera de los campos de entrada, excepto startOfWeek, está ausente o establecido
nullen, osi unit es
weeky startOfWeek no está presente o está configuradonullen.
Utiliza el calendario gregoriano proleptico para las fechas anteriores al 1583 año.
Cuenta el horario de verano, pero no tiene en cuenta los segundos intercalares.
binSize y unit campos
En conjunto, binSize y unit especifican el período de tiempo utilizado en el $dateTrunc cálculo.
Por ejemplo:
Si binSize es
1y unithoures, el período de tiempo es una hora. Para la fecha,2021-03-20T11:30:05Z$dateTrunc2021-03-20T11:00:00Zdevuelve.Si binSize es
2y unithoures, 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 binSize períodos de tiempo en la unidad de 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
weekde, utiliza una fecha de$dateTruncreferencia2000-01-01T00:00:00.00Zde. Por ejemplo, si binSize es10y unit es, losyearperíodos de tiempo de ejemplo son:2000-01-01T00:00:00.00Z2010-01-01T00:00:00.00Z2020-01-01T00:00:00.00Z
Igual
weeka, utiliza una fecha de referencia que se establece en el primer día de la semana más temprano que sea mayor o$dateTruncigual2000-01-01que. El primer día se establece usando startOfWeek (el valor predeterminado 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 un ISODate. Si el campo binSize
1es, establece las partes$dateTruncmenos significativas (determinadas por la unidad) del0ISODate devuelto en y mantiene el resto del ISODate sin cambios.
Si unidad es:
year:$dateTruncdevuelve la ISODate para el inicio de enero 1 para el año en fecha.quarter:$dateTruncdevuelve la 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:$dateTruncdevuelve la ISODate para el inicio del primer día del mes en fecha.week:$dateTruncdevuelve la fecha ISO para el inicio del día startOfWeek en formato de fecha. El valor predeterminado para startOfWeek es domingo.day:$dateTruncdevuelve la ISODate para el inicio del día en fecha.hour:$dateTruncdevuelve el ISODate para el inicio de la hora en la fecha.minute:$dateTruncdevuelve la ISODate para el inicio del minuto en la fecha.second:$dateTruncdevuelve la ISODate para el inicio del segundo en la 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: 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 el resultado.$dateTruncTrunca elorderDatecampo a un2weekperíodo de tiempoAmerica/Los_Angelesde binSize unidad en la zona 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 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 elorderDatecampo a un6monthperíodo de tiempo unitario 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 } ]