Convertir l'horodatage en date dans MongoDB
- Convertir l’horodatage en date dans MongoDB
- Convertir l’horodatage en date lorsque l’horodatage est de type numéro
- Convertir l’horodatage en date lorsque l’horodatage est de type chaîne
- Convertir l’horodatage en date lorsque l’horodatage est de type objet
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 }