MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

3 maneiras de obter a semana de uma data no MongoDB


O MongoDB oferece várias opções para extrair partes de uma data.

Este artigo apresenta 3 maneiras de retornar a parte da semana de uma data no MongoDB.

Dados de amostra


Suponha que tenhamos uma coleção chamada cats com os seguintes documentos:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:12Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }

Os exemplos a seguir demonstram várias opções para retornar a parte da semana do born campo desses documentos.

A $week Operador


A $week operador retorna a semana do ano para uma data como um número entre 0 e 53.

Podemos, portanto, executar o seguinte código para retornar a semana do born campo no documento acima.
db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthWeek: { $week: "$born" }
        }
    }
  ]
)

Resultado:
{ "birthWeek" : 1 }
{ "birthWeek" : 49 }
{ "birthWeek" : 38 }

Você também pode especificar o fuso horário ao usar o $week operador.

Veja MongoDB $week para mais informações e exemplos.

A $dateToString Operador


O $dateToString O operador converte um objeto de data em uma string de acordo com um formato especificado pelo usuário. O usuário pode, portanto, especificar que apenas a parte da semana seja retornada, se necessário.

Existem especificadores de formato para cada parte da data. Com relação à parte da semana da data, o %U especificador de formato retorna a semana do ano e o %V especificador de formato retorna a semana do ano no formato ISO 8601.

Exemplo:
db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthWeek: { $dateToString: { format: "%U", date: "$born" } },
          birthWeekISO: { $dateToString: { format: "%V", date: "$born" } }
       }
     }
   ]
)

Resultado:
{ "birthWeek" : "01", "birthWeekISO" : "53" }
{ "birthWeek" : "49", "birthWeekISO" : "49" }
{ "birthWeek" : "38", "birthWeekISO" : "39" }

Veja MongoDB $dateToString para mais informações e exemplos.

Veja também MongoDB $dateToString Especificadores de formato para uma lista de especificadores de formato que podem ser usados ​​com este operador.

A $isoWeek Operador


Se você precisar retornar a semana no formato ISO 8601, use $isoWeek . O ano ISO 8601 começa com a segunda-feira da semana 1 e termina com o domingo da última semana.

Exemplo:
db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthIsoWeek: { $isoWeek: "$born" }
        }
    }
  ]
)

Resultado:
{ "birthIsoWeek" : 53 }
{ "birthIsoWeek" : 49 }
{ "birthIsoWeek" : 39 }

Este resultado é diferente de quando usamos o $week operador.

Aqui está um exemplo que mostra a diferença.
db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthWeek: { $week: "$born" },
          birthIsoWeek: { $isoWeek: "$born" }
        }
    }
  ]
)

Resultado:
{ "birthWeek" : 1, "birthIsoWeek" : 53 }
{ "birthWeek" : 49, "birthIsoWeek" : 49 }
{ "birthWeek" : 38, "birthIsoWeek" : 39 }