Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

$dateFromPartts ( operador de expressão )

$dateFromParts

Constrói e retorna um objeto de data, dadas as propriedades constituintes da data.

A expressão $dateFromParts tem a seguinte sintaxe:

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

Você também pode especificar os campos de data constituintes no formato ISO dia da semana usando a seguinte sintaxe:

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

O $dateFromParts pega um documento com os seguintes campos:

Importante

Não é possível combinar o uso de datas de calendário e campos de data da semana ISO ao criar o documento de entrada $dateFromParts.

Campo
Obrigatório/Opcional
Descrição

year

Obrigatório se não estiver usando isoWeekYear

Ano do calendário. Pode ser qualquer expressão avaliada como um número.

Intervalo de valor: 1-9999

$dateFromParts

isoWeekYear

Obrigatório se não estiver usando year

Semana Data Ano ISO. Pode ser qualquer expressão que seja avaliada como um número.

Intervalo de valor: 1-9999

$dateFromParts

month

Opcional. Só pode ser usado com year.

Mês. Pode ser qualquer expressão avaliada como um número.

Padrão é 1.

Intervalo de valor: 1-12

Faixa de valor

isoWeek

Opcional. Só pode ser usado com isoWeekYear.

Semana do ano. Pode ser qualquer expressão que seja avaliada como um número.

Padrão é 1.

Intervalo de valor: 1-53

Faixa de valor

day

Opcional. Só pode ser usado com year.

Dia do mês. Pode ser qualquer expressão que seja avaliada como um número.

Padrão é 1.

Intervalo de valor: 1-31

Faixa de valor

isoDayOfWeek

Opcional. Só pode ser usado com isoWeekYear.

Dia da semana (de segunda 1 a domingo,7). Pode ser qualquer expressão que avalia para um número.

Padrão é 1.

Intervalo de valor: 1-7

Faixa de valor

hour

Opcional

Hora. Pode ser qualquer expressão que seja avaliada como um número.

Padrão é 0.

Intervalo de valor: 0-23

Faixa de valor

minute

Opcional

Minuto. Pode ser qualquer expressão que seja avaliada como um número.

Padrão é 0.

Intervalo de valor: 0-59 intervalo de valor

second

Opcional

Segundo. Pode ser qualquer expressão que seja avaliada como um número.

Padrão é 0.

Intervalo de valor: 0-59

Faixa de valor

millisecond

Opcional

Milissegundo. Pode ser qualquer expressão que seja avaliada como um número.

Padrão é 0.

Intervalo de valor: 0-999

Faixa de valor

timezone

Opcional

<timezone> pode ser qualquer expressão avaliada como uma string cujo valor seja:

  • um Identificador de fuso horário Olson, como "Europe/London" ou "America/New_York", ou

  • um deslocamento UTC no formato:

    • +/-[hh]:[mm], e.g. "+04:45" ou

    • +/-[hh][mm], e.g. "-0530" ou

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

Para mais informações sobre expressões, consulte Expressões.

O intervalo de valores permitido para year e isoWeekYear é 1-9999.

Se o valor especificado para campos diferentes de year, isoWeekYear e timezone estiver fora do intervalo válido, $dateFromParts transportará ou subtrairá a diferença de outras partes da data para calcular a data.

Considere a seguinte expressão $dateFromParts em que o valor do campo month é 14, que é 2 meses maior que o valor máximo de 12 meses (ou 1 ano):

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

A expressão calcula a data aumentando o year por 1 e definindo o month para 2 para retornar:

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

Considere a seguinte expressão $dateFromParts em que o valor do campo month é 0, que é 1 mês a menos do que o valor mínimo de 1 mês:

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

A expressão calcula a data diminuindo o year por 1 e definindo o month para 12 para retornar:

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

Ao usar um identificador de fuso horário Olson no campo <timezone>, o MongoDB aplica a compensação de horário de verão, se aplicável ao fuso horário especificado.

Por exemplo, considere uma collection sales com o seguinte documento:

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

A seguinte agregação ilustra como o MongoDB lida com o deslocamento DST para o Identificador de fuso horário Olson. O exemplo utiliza os operadores $hour e $minute para retornar as partes correspondentes do campo date:

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" }
}
}
}])

A operação retorna o seguinte resultado:

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

A seguinte agregação utiliza $dateFromParts para construir três objetos de data a partir dos campos de entrada fornecidos:

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'
}
}
}
}])

A operação retorna o seguinte 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")
}