$dateFromParts (Construir Data a partir de Partes)
Última atualização: 2026-10-09
$dateFromParts (Construir Data a partir de Partes)
$dateFromParts constrói uma data a partir de partes numéricas como year (ano), month (mês), day (dia), hour (hora), minute (minuto), second (segundo) e millisecond (milissegundo) — a inversa de $dateToParts. Tem dois modos: campos de calendário (year, month, day...) ou campos de semana ISO 8601 (isoWeekYear, isoWeek, isoDayOfWeek). Campos não especificados assumem seus valores mínimos (month assume o padrão 1, hour o padrão 0). Útil para reconstruir datas a partir de componentes armazenados ou para criar limites de intervalos. timezone define o fuso da data resultante e tem UTC como padrão.
| Categoria | Data |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
{ $dateFromParts: { year: <número>, month: <número>, day: <número>, hour: <número>, minute: <número>, second: <número>, millisecond: <número>, timezone: <fuso horário> } }
⚙️ Parâmetros
| year | Obrigatório; year no modo calendário, ou isoWeekYear no modo ISO. |
|---|---|
| month / isoWeek | Mês (padrão 1) ou semana ISO; use apenas os campos de um único modo. |
| day / isoDayOfWeek | Dia (padrão 1) ou dia ISO da semana. |
| hour/minute/second/millisecond | Opcional; padrão 0. |
| timezone | Fuso horário opcional para a data construída. |
Retorno:O BSON Date construído; null se year estiver ausente.
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// $dateFromParts: reconstruir o horário do evento a partir das partes (horário de Pequim)
db.events.aggregate([
{ $project: {
startedAt: { $dateFromParts: { year: '$y', month: '$m', day: '$d', timezone: 'Asia/Shanghai' } }
} }
])
Saída:
{ "_id": 1, "startedAt": ISODate("2026-09-25T00:00:00Z") }
{ "_id": 2, "startedAt": ISODate("2026-10-01T00:00:00Z") }
📌 Notas
- O modo ISO usa isoWeekYear/isoWeek/isoDayOfWeek; nunca misture com year/month/day
- Valores fora do intervalo geram erro (ex.: mês 13) — valide a entrada antes
- timezone afeta o resultado; o padrão é UTC