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

5 formas de obtener los minutos de una fecha en MongoDB

Este artículo presenta 5 formas de devolver la porción de minutos de un objeto Date 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:47Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:00Z") }

Los siguientes ejemplos muestran varias opciones para devolver la porción de minutos del born campo de esos documentos.

El $minute Operador

El $minute El operador está diseñado específicamente para devolver un documento con la parte de los minutos de una fecha determinada.

Podemos ejecutar el siguiente código para devolver la porción de minutos del born campo en el documento anterior.

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

Resultado:

{ "birthMinute" : 30 }
{ "birthMinute" : 0 }
{ "birthMinute" : 45 }

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

Ver MongoDB $minute 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 los minutos si es necesario.

Hay especificadores de formato para cada parte de la fecha. El %M El especificador de formato devuelve la parte de los minutos.

Ejemplo:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthMinute: { $dateToString: { format: "%M", date: "$born" } }
       }
     }
   ]
)

Resultado:

{ "birthMinute" : "30" }
{ "birthMinute" : "00" }
{ "birthMinute" : "45" }

También puedes usar %Z para devolver los minutos de diferencia de UTC como un número.

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

El $dateToParts Operador

El $dateToParts El operador devuelve un documento que contiene las partes constituyentes de un valor de fecha BSON dado como propiedades individuales. Las propiedades devueltas son year , month , day , hour , minute , second y millisecond .

Por lo tanto, podríamos usar $dateToParts en una etapa de canalización, luego agregue otra etapa de canalización que extraiga el minute parte.

Esto es lo que $dateToParts devoluciones de nuestros tres documentos:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    }
  ]
).pretty()

Resultado:

{
	"dateParts" : {
		"year" : 2021,
		"month" : 1,
		"day" : 3,
		"hour" : 23,
		"minute" : 30,
		"second" : 15,
		"millisecond" : 123
	}
}
{
	"dateParts" : {
		"year" : 2019,
		"month" : 12,
		"day" : 8,
		"hour" : 4,
		"minute" : 0,
		"second" : 47,
		"millisecond" : 0
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 45,
		"second" : 0,
		"millisecond" : 0
	}
}

Este resultado se puede pasar a la siguiente etapa de la canalización para extraer solo el minute campo.

Esto es lo que sucede si agregamos otra proyección solo para el minute campo:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    },
    {
      $project:
        {
          birthMinute: "$dateParts.minute"
        }
    }
  ]
)

Resultado:

{ "birthMinute" : 30 }
{ "birthMinute" : 0 }
{ "birthMinute" : 45 }

Entonces, si usa $dateToParts en su embudo, tendrá acceso al minute (y todos los demás campos) en la siguiente etapa.

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

El forEach() Método

Puedes usar cursor.forEach() para iterar a través del cursor, usando un método de JavaScript como getMinutes() o getUTCMinutes() para devolver solo los minutos.

db.cats.find().forEach(
  function(c) {
    print(
      c.born.getUTCMinutes()
      );
  }
);

Resultado:

30
0
45

getUTCMinutes() El método de JavaScript devuelve un número entero, entre 0 y 59, que representa los minutos en la fecha dada según la hora universal.

El getMinutes() el método lo devuelve en la hora local.

También puede notar que las opciones anteriores devuelven un documento completo que contiene un par de nombre/valor, mientras que esta opción solo devuelve el valor de los minutos reales, y no el documento completo.

El map() Método

El cursor.map() El método aplica una función a cada documento visitado por el cursor y combina los valores en una matriz.

Ejemplo:

db.cats.find().map(
  function(c) {
    c = c.born.getUTCMinutes();
    return c;
  }
);

Resultado:

[ 30, 0, 45 ]