Cet article présente 5 façons de renvoyer la partie millisecondes 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:20.112Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:01.007Z") }
Les exemples suivants illustrent diverses options pour renvoyer la partie millisecondes du born
champ de ces documents.
Le $millisecond
Opérateur
Le $millisecond
est conçu spécifiquement pour renvoyer un document avec la partie en millisecondes d'une date donnée.
Nous pouvons exécuter le code suivant pour renvoyer la partie millisecondes du born
champ dans le document ci-dessus.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMillisecond: { $millisecond: "$born" }
}
}
]
)
Résultat :
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
Le $millisecond
l'opérateur accepte également un timezone
argument.
Voir MongoDB $millisecond
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 millisecondes est renvoyée si nécessaire.
Il existe des spécificateurs de format pour chaque partie de date. Le %L
Le spécificateur de format renvoie la portion en millisecondes (3 chiffres, remplis de zéros).
Exemple :
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMillisecond: { $dateToString: { format: "%L", date: "$born" } }
}
}
]
)
Résultat :
{ "birthMillisecond" : "123" } { "birthMillisecond" : "112" } { "birthMillisecond" : "007" }
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 millisecond
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" : 20, "millisecond" : 112 } } { "dateParts" : { "year" : 2020, "month" : 9, "day" : 24, "hour" : 10, "minute" : 45, "second" : 1, "millisecond" : 7 } }
Ce résultat peut ensuite être transmis à l'étape suivante du pipeline, et nous pouvons donc extraire uniquement la millisecond
champ à l'étape suivante.
Voici ce qui se passe si nous ajoutons une autre projection pour seulement la millisecond
champ :
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMillisecond: "$dateParts.millisecond"
}
}
]
)
Résultat :
{ "birthMillisecond" : 123 } { "birthMillisecond" : 112 } { "birthMillisecond" : 7 }
Ainsi, chaque fois que vous utilisez $dateToParts
dans votre pipeline, vous aurez accès à la millisecond
champ (et les autres parties de date) à 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 getMilliseconds()
ou getUTCMilliseconds()
pour renvoyer uniquement les millisecondes.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMilliseconds()
);
}
);
Résultat :
123 112 7
Le getUTCSeconds()
La méthode JavaScript renvoie un nombre entier, compris entre 0 et 999, représentant la partie millisecondes de l'objet date donné.
Le getMilliseconds()
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 en millisecondes, 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.getUTCMilliseconds();
return c;
}
);
Résultat :
[ 123, 112, 7 ]