Convertir l'horodatage en date dans MongoDB

Mehvish Ashiq 30 janvier 2023
  1. Convertir l’horodatage en date dans MongoDB
  2. Convertir l’horodatage en date lorsque l’horodatage est de type numéro
  3. Convertir l’horodatage en date lorsque l’horodatage est de type chaîne
  4. Convertir l’horodatage en date lorsque l’horodatage est de type objet
Convertir l'horodatage en date dans MongoDB

Ce tutoriel montre comment nous pouvons convertir l’horodatage en date dans MongoDB. Il illustre également comment compter les entrées pour une date spécifique.

Convertir l’horodatage en date dans MongoDB

La conversion de horodatage en date dépend du type d’horodatage enregistré. Est-il du type objet, nombre ou chaîne ?

Nous pouvons vérifier le type de champ en utilisant la commande suivante sur le shell mongo. Dans ce didacticiel, nous allons apprendre à convertir l’horodatage en date s’il est de type nombre, chaîne ou objet.

Vérifiez le type de champ :

// MongoDB 5.0.8

> typeof db.collection_name.findOne().fieldName;

Convertir l’horodatage en date lorsque l’horodatage est de type numéro

Exemple de code (pour collection1) :

// MongoDB 5.0.8

> db.collection1.insertMany([
    {"_id": 1, "datetime": new Date().getTime()}, //saves timestamp in milliseconds
    {"_id": 2, "datetime": new Date().getTime()},
    {"_id": 3, "datetime": new Date().getTime()},
    {"_id": 4, "datetime": new Date().getTime()},
    {"_id": 5, "datetime": new Date().getTime()}
]);

> db.collection1.find();

PRODUCTION:

{ "_id" : 1, "datetime" : 1655448286502 }
{ "_id" : 2, "datetime" : 1655448286502 }
{ "_id" : 3, "datetime" : 1655448286502 }
{ "_id" : 4, "datetime" : 1655448286502 }
{ "_id" : 5, "datetime" : 1655448286502 }

Vérifier le type du champ datetime :

// MongoDB 5.0.8

> typeof db.collection1.findOne().datetime;

PRODUCTION:

number

Une fois que la collection est prête et que nous connaissons le type de champ, nous pouvons utiliser l’approche suivante pour convertir l’horodatage en date et compter les entrées par date.

Exemple de code (pour collection1) :

// MongoDB 5.0.8

> db.collection1.aggregate([
      {
          "$project": {
              "_id": { "$toDate": "$datetime" }
           }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" }},
              "count": { "$sum": 1 }
          }
      }
]);

PRODUCTION:

{ "_id" : "2022-06-17", "count" : 5 }

Ici, nous utilisons l’étape d’agrégation $project qui prend les documents de la collection spécifiée et indique l’inclusion des champs, la suppression du champ _id, l’ajout de nouveaux champs et la réinitialisation des valeurs des champs existants.

À l’intérieur de l’étape $project, nous convertissons la valeur du champ datetime en date à l’aide de l’agrégation $toDate et l’enregistrons dans le champ _id, qui est ensuite transmis à l’étape d’agrégation $group.

À ce stade, nous utilisons l’opérateur de pipeline d’agrégation $dateToString pour convertir l’objet date spécifié en chaîne selon le format spécifié et l’enregistrons dans le champ _id, qui est ensuite utilisé pour regrouper les documents.

Le $dateToString prend soit timestamp, date ou ObjectId qui est ensuite transformé en tenant compte du format spécifié par l’utilisateur, tandis que $sum renvoie la somme collective des valeurs numériques uniquement.

Enfin, nous regroupons les documents par l’item, qui est ici _id. N’oubliez pas que le _id contient maintenant une valeur de chaîne car nous avons converti la date spécifiée en une chaîne selon le format spécifié par l’utilisateur.

Convertir l’horodatage en date lorsque l’horodatage est de type chaîne

Exemple de code (pour collection2) :

// MongoDB 5.0.8

> db.collection2.insertMany([
    {"_id": 1, "datetime": "1655445247168"},
    {"_id": 2, "datetime": "1522838153324"},
    {"_id": 3, "datetime": "1513421466415"},
    {"_id": 4, "datetime": "1515488183153"},
    {"_id": 5, "datetime": "1521571234500"}
]);

> db.collection2.find();

PRODUCTION:

{ "_id" : 1, "datetime" : "1655445247168" }
{ "_id" : 2, "datetime" : "1522838153324" }
{ "_id" : 3, "datetime" : "1513421466415" }
{ "_id" : 4, "datetime" : "1515488183153" }
{ "_id" : 5, "datetime" : "1521571234500" }

Vérifier le type du champ datetime :

// MongoDB 5.0.8

> typeof db.collection2.findOne().datetime;

PRODUCTION:

string

Dans cette collection, nous avons l’horodatage au format chaîne. Ainsi, nous pouvons utiliser la solution suivante pour le convertir de l’horodatage à la date et les regrouper par date.

Exemple de code (pour collection2) :

// MongoDB 5.0.8

> db.collection2.aggregate([
      {
          "$project": {
              "_id": { "$toDate": { "$toLong": "$datetime" }}
          }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
              "count": { "$sum": 1 }
          }
      }
]);

PRODUCTION:

{ "_id" : "2018-03-20", "count" : 1 }
{ "_id" : "2017-12-16", "count" : 1 }
{ "_id" : "2022-06-17", "count" : 1 }
{ "_id" : "2018-04-04", "count" : 1 }
{ "_id" : "2018-01-09", "count" : 1 }

Ce code est le même que l’exemple précédent à une différence près. Ici, nous utilisons $toLong pour convertir d’abord le champ datetime de chaîne en type numérique, puis nous utilisons cette valeur convertie pour la transformer en date à l’aide de $toDate.

Convertir l’horodatage en date lorsque l’horodatage est de type objet

Exemple de code (pour collection3) :

// MongoDB 5.0.8

> db.collection3.insertMany([
    {"_id":1, "datetime": new Timestamp()},
    {"_id":2, "datetime": new Timestamp()},
    {"_id":3, "datetime": new Timestamp()},
    {"_id":4, "datetime": new Timestamp()},
    {"_id":5, "datetime": new Timestamp()}
]);

> db.collection3.find();

PRODUCTION:

{ "_id" : 1, "datetime" : Timestamp(1655448393, 1) }
{ "_id" : 2, "datetime" : Timestamp(1655448393, 2) }
{ "_id" : 3, "datetime" : Timestamp(1655448393, 3) }
{ "_id" : 4, "datetime" : Timestamp(1655448393, 4) }
{ "_id" : 5, "datetime" : Timestamp(1655448393, 5) }

Vérifier le type du champ datetime :

// MongoDB 5.0.8

> typeof db.collection3.findOne().datetime;

PRODUCTION:

object

Cette fois, nous pouvons utiliser la solution suivante pour convertir l’horodatage en date et compter les entrées par date.

Exemple de code (pour collection3) :

// MongoDB 5.0.8

> db.collection3.aggregate([
      {
          "$project": { "_id": "$datetime" }
      },
      {
          "$group": {
              "_id": { "$dateToString": { "format": "%Y-%m-%d", "date": "$_id" } },
              "count": { "$sum": 1 }
          }
      }
]);

PRODUCTION:

{ "_id" : "2022-06-17", "count" : 5 }
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook