sql >> Base de Datos >  >> NoSQL >> MongoDB

3 formas de obtener la semana a partir de una fecha en MongoDB

MongoDB proporciona varias opciones para extraer partes de fechas de una fecha.

Este artículo presenta 3 formas de devolver la parte de la semana de una fecha en MongoDB.

Datos de muestra

Supongamos que tenemos una colección llamada cats con los siguientes 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") }

Los siguientes ejemplos muestran varias opciones para devolver la parte de la semana del born campo de esos documentos.

La $week Operador

La $week operador devuelve la semana del año para una fecha como un número entre 0 y 53.

Por lo tanto, podemos ejecutar el siguiente código para devolver la semana desde el born campo en el documento anterior.

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthWeek: { $week: "$born" }
        }
    }
  ]
)

Resultado:

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

También puede especificar la zona horaria al usar $week operador.

Ver MongoDB $week para más información y ejemplos.

El $dateToString Operador

El $dateToString El operador convierte un objeto de fecha en una cadena de acuerdo con un formato especificado por el usuario. Por lo tanto, el usuario puede especificar que solo se devuelva la parte de la semana si es necesario.

Hay especificadores de formato para cada parte de la fecha. Con respecto a la parte de la semana de la fecha, el %U especificador de formato devuelve la semana del año y el %V El especificador de formato devuelve la semana del año en formato ISO 8601.

Ejemplo:

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

Ver MongoDB $dateToString para más información y ejemplos.

Ver también MongoDB $dateToString Especificadores de formato para obtener una lista de especificadores de formato que se pueden usar con este operador.

La $isoWeek Operador

Si necesita devolver la semana en formato ISO 8601, use $isoWeek . El año ISO 8601 comienza el lunes de la semana 1 y finaliza el domingo de la última semana.

Ejemplo:

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

Resultado:

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

Este resultado es diferente a cuando usamos $week operador.

Aquí hay un ejemplo que muestra la diferencia.

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 }