Docs Menu
Docs Home
/ /

$dateFromParts (operador de agregación)

$dateFromParts

Construye y devuelve un objeto Fecha dadas las propiedades constituyentes de la fecha.

El $dateFromParts La expresión tiene la siguiente sintaxis:

{
$dateFromParts : {
'year': <year>, 'month': <month>, 'day': <day>,
'hour': <hour>, 'minute': <minute>, 'second': <second>,
'millisecond': <ms>, 'timezone': <tzExpression>
}
}

También puede especificar sus campos de fecha constitutiva en la fecha de la semana ISO formato utilizando la siguiente sintaxis:

{
$dateFromParts : {
'isoWeekYear': <year>, 'isoWeek': <week>, 'isoDayOfWeek': <day>,
'hour': <hour>, 'minute': <minute>, 'second': <second>,
'millisecond': <ms>, 'timezone': <tzExpression>
}
}

El $dateFromParts procesa un documento con los siguientes campos:

Importante

No puedes combinar el uso de fechas del calendario y campos de fechas semanales ISO al construir tu documento de entrada $dateFromParts.

Campo
Obligatorio/Opcional
Descripción

year

Obligatorio si no se utiliza isoWeekYear

Año calendario. Puede ser cualquiera. expresión que evalúa a un número.

Rango de valores: 1-9999

Si el número especificado está fuera de este rango, se generarán errores. El límite inferior para este$dateFromParts valor 1 es.

isoWeekYear

Obligatorio si no se utiliza year

ISO Semana Fecha Año. Puede ser cualquier expresión que evalúe un número.

Rango de valores: 1-9999

Si el número especificado está fuera de este rango, se generarán errores. El límite inferior para este$dateFromParts valor 1 es.

month

Opcional. Solo se puede utilizar con year.

Mes. Puede ser cualquier expresión que evalúe un número.

Se establece por defecto en 1.

Rango de valores: 1-12

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

isoWeek

Opcional. Solo se puede utilizar con isoWeekYear.

Semana del año. Puede ser cualquier expresión que dé como resultado un número.

Se establece por defecto en 1.

Rango de valores: 1-53

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

day

Opcional. Solo se puede utilizar con year.

Día del mes. Puede ser cualquier expresión que dé como resultado un número.

Se establece por defecto en 1.

Rango de valores: 1-31

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

isoDayOfWeek

Opcional. Solo se puede utilizar con isoWeekYear.

Día de la semana (lunes 1 - 7 domingo). Puede ser cualquier expresión que dé como resultado un número.

Se establece por defecto en 1.

Rango de valores: 1-7

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

hour

Opcional

Hora. Puede ser cualquier expresión que evalúe un número.

Se establece por defecto en 0.

Rango de valores: 0-23

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

minute

Opcional

Minuto. Puede ser cualquier expresión que evalúe un número.

Se establece por defecto en 0.

Rango de valores: 0-.59 Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte el rango de valores para ver ejemplos.

second

Opcional

Segundo. Puede ser cualquier expresión que evalúe un número.

Se establece por defecto en 0.

Rango de valores: 0-59

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

millisecond

Opcional

Milisegundo. Puede ser cualquier expresión que evalúe un número.

Se establece por defecto en 0.

Rango de valores: 0-999

Si el número especificado está fuera de este rango, incorpora la diferencia en el$dateFromParts cálculo de la fecha. Consulte Rango de valores para ver ejemplos.

timezone

Opcional

<timezone> puede ser cualquier expresión que evalúe una cadena cuyo valor sea:

  • un identificador de zona horaria de Olson, como "Europe/London" "America/New_York"o, o

  • un desplazamiento UTC en la forma:

    • +/-[hh]:[mm], por ejemplo "+04:45", o

    • +/-[hh][mm], por ejemplo "-0530", o

    • +/-[hh], e.g. "+03".

Para obtener más información sobre las expresiones, consulta Expresiones.

El rango de valores admitido para year y isoWeekYear es 1-9999.

Si el valor especificado para campos distintos year isoWeekYearde, y timezone está fuera del rango válido, $dateFromParts lleva o resta la diferencia de otras partes de la fecha para calcular la fecha.

Considere la siguiente expresión donde $dateFromParts el month valor del campo 14 es, que es 2 meses mayor que el valor máximo de 12 meses (o 1 año):

{ $dateFromParts: { 'year' : 2017, 'month' : 14, 'day': 1, 'hour' : 12 } }

La expresión calcula la fecha incrementando year por 1 y estableciendo month en 2 para devolver:

ISODate("2018-02-01T12:00:00Z")

Considere la siguiente expresión donde $dateFromParts el month valor del campo 0 es, que es 1 mes menos que el valor mínimo de 1 mes:

{ $dateFromParts: { 'year' : 2017, 'month' : 0, 'day': 1, 'hour' : 12 } }

La expresión calcula la fecha disminuyendo year en 1 y estableciendo month en 12 para devolver:

ISODate("2016-12-01T12:00:00Z")

Al utilizar un identificador de zona horaria de Olson en el campo <timezone>, MongoDB aplica el Desplazamiento del horario de verano, si corresponde para la zona horaria especificada.

Por ejemplo, considera una colección sales con el siguiente documento:

db.sales.insertOne(
{
"_id" : 1,
"item" : "abc",
"price" : 10,
"quantity" : 2,
"date" : ISODate("2014-01-01T08:15:39.736Z")
}
)

La siguiente agregación ilustra cómo MongoDB gestiona la diferencia horaria del identificador de zona horaria Olson. El ejemplo utiliza los operadores $hour y para devolver las partes correspondientes del $minute date campo:

db.sales.aggregate([
{
$project: {
"nycHour": {
$hour: { date: "$date", timezone: "-05:00" }
},
"nycMinute": {
$minute: { date: "$date", timezone: "-05:00" }
},
"gmtHour": {
$hour: { date: "$date", timezone: "GMT" }
},
"gmtMinute": {
$minute: { date: "$date", timezone: "GMT" } },
"nycOlsonHour": {
$hour: { date: "$date", timezone: "America/New_York" }
},
"nycOlsonMinute": {
$minute: { date: "$date", timezone: "America/New_York" }
}
}
}])

La operación devuelve el siguiente resultado:

{
"_id": 1,
"nycHour" : 5,
"nycMinute" : 24,
"gmtHour" : 10,
"gmtMinute" : 24,
"nycOlsonHour" : 6,
"nycOlsonMinute" : 24
}

La siguiente agregación utiliza para construir tres objetos de fecha a partir de los campos de entrada $dateFromParts proporcionados:

db.sales.aggregate([
{
$project: {
date: {
$dateFromParts: {
'year' : 2017, 'month' : 2, 'day': 8, 'hour' : 12
}
},
date_iso: {
$dateFromParts: {
'isoWeekYear' : 2017, 'isoWeek' : 6, 'isoDayOfWeek' : 3, 'hour' : 12
}
},
date_timezone: {
$dateFromParts: {
'year' : 2016, 'month' : 12, 'day' : 31, 'hour' : 23,
'minute' : 46, 'second' : 12, 'timezone' : 'America/New_York'
}
}
}
}])

La operación devuelve el siguiente resultado:

{
"_id" : 1,
"date" : ISODate("2017-02-08T12:00:00Z"),
"date_iso" : ISODate("2017-02-08T12:00:00Z"),
"date_timezone" : ISODate("2017-01-01T04:46:12Z")
}

Volver

$dateDiff

En esta página