MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

5 façons d'obtenir les minutes d'une date dans MongoDB

Cet article présente 5 façons de renvoyer la partie minutes d'un objet Date dans MongoDB.

Exemple de données

Supposons que nous ayons une collection appelée cats avec les documents suivants :

{ "_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") }

Les exemples suivants illustrent diverses options pour renvoyer la partie minutes du born champ de ces documents.

La $minute Opérateur

La $minute est spécialement conçu pour renvoyer un document avec la partie minutes d'une date donnée.

Nous pouvons exécuter le code suivant pour renvoyer la partie minutes du born champ dans le document ci-dessus.

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

Résultat :

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

Vous pouvez également spécifier le fuseau horaire lorsque vous utilisez le $minute opérateur.

Voir MongoDB $minute pour plus d'informations et d'exemples.

Le $dateToString Opérateur

Le $dateToString L'opérateur convertit un objet date en une chaîne selon un format spécifié par l'utilisateur. L'utilisateur peut donc spécifier que seule la partie minutes est renvoyée si nécessaire.

Il existe des spécificateurs de format pour chaque partie de date. Le %M Le spécificateur de format renvoie la partie des minutes.

Exemple :

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

Résultat :

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

Vous pouvez également utiliser %Z pour renvoyer le décalage des minutes par rapport à UTC sous forme de nombre.

Voir MongoDB $dateToString pour plus d'informations et d'exemples.

Le $dateToParts Opérateur

Le $dateToParts L'opérateur renvoie un document qui contient les parties constitutives d'une valeur de date BSON donnée en tant que propriétés individuelles. Les propriétés renvoyées sont year , month , day , hour , minute , second et millisecond .

On pourrait donc utiliser $dateToParts dans une étape de pipeline, puis ajoutez une autre étape de pipeline qui extrait la minute partie.

Voici ce que $dateToParts retours pour nos trois documents :

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

Résultat :

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

Ce résultat peut ensuite être transmis à l'étape suivante du pipeline pour extraire uniquement la minute champ.

Voici ce qui se passe si nous ajoutons une autre projection pour seulement la minute champ :

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

Résultat :

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

Donc, si vous utilisez $dateToParts dans votre pipeline, vous aurez alors accès à la minute champ (et tous les autres champs) à l'étape suivante.

Voir MongoDB $dateToParts pour plus d'informations et d'exemples.

Le forEach() Méthode

Vous pouvez utiliser cursor.forEach() pour parcourir le curseur, en utilisant une méthode JavaScript telle que getMinutes() ou getUTCMinutes() pour renvoyer uniquement les minutes.

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

Résultat :

30
0
45

Le getUTCMinutes() La méthode JavaScript renvoie un nombre entier, compris entre 0 et 59, représentant les minutes de la date donnée selon le temps universel.

Le getMinutes() la renvoie en heure locale.

Vous pouvez également remarquer que les options précédentes renvoient un document entier contenant une paire nom/valeur, alors que cette option renvoie uniquement la valeur réelle des minutes, et non le document entier.

La map() Méthode

Le cursor.map() La méthode applique une fonction à chaque document visité par le curseur et combine les valeurs dans un tableau.

Exemple :

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

Résultat :

[ 30, 0, 45 ]