MongoDB fournit un certain nombre d'opérateurs de pipeline d'agrégation pour travailler avec des dates, y compris des opérateurs qui extraient certaines parties de dates, telles que l'année, le mois, le jour, etc.
Il existe également quelques méthodes MongoDB qui vous permettent de parcourir un curseur et d'appliquer une fonction JavaScript. Vous pouvez donc utiliser JavaScript pour extraire des valeurs de date et des parties de date, etc. à partir d'un champ selon les besoins.
Cet article présente 5 façons de renvoyer la partie mois d'une 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:12Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }
Les exemples suivants illustrent diverses options pour renvoyer la partie mois à partir de born
champ de ces documents.
Le $month
Opérateur
Le $month
est spécialement conçu pour renvoyer un document avec la partie mois d'une date donnée.
Nous pouvons exécuter le code suivant pour renvoyer le mois à partir du born
champ dans le document ci-dessus.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMonth: { $month: "$born" }
}
}
]
)
Résultat :
{ "birthMonth" : 1 } { "birthMonth" : 12 } { "birthMonth" : 9 }
Vous pouvez également spécifier le fuseau horaire lorsque vous utilisez le $month
opérateur.
Voir MongoDB $month
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 mois 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 le mois.
Exemple :
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMonth: { $dateToString: { format: "%m", date: "$born" } }
}
}
]
)
Résultat :
{ "birthMonth" : "01" } { "birthMonth" : "12" } { "birthMonth" : "09" }
Nous aurions pu fournir plus de spécificateurs de format pour inclure des parties de date dans le résultat, mais comme nous ne souhaitons extraire que le mois dans cet article, nous n'avons utilisé qu'un seul spécificateur de format.
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 le month
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" : 12, "millisecond" : 0 } } { "dateParts" : { "year" : 2020, "month" : 9, "day" : 24, "hour" : 10, "minute" : 30, "second" : 0, "millisecond" : 0 } }
Ce résultat peut ensuite être transmis à l'étape suivante du pipeline pour extraire uniquement le month
champ.
Voici ce qui se passe si nous ajoutons une autre projection uniquement pour le month
champ :
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMonth: "$dateParts.month"
}
}
]
)
Résultat :
{ "birthMonth" : 1 } { "birthMonth" : 12 } { "birthMonth" : 9 }
Ce n'est évidemment pas aussi concis que d'utiliser les options précédentes. Cependant, selon ce que vous faites dans votre pipeline, cette approche pourrait convenir.
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 getMonth()
ou getUTCMonth()
pour renvoyer uniquement la valeur du mois.
db.cats.find().forEach(
function(c) {
print(
c.born.getMonth()
);
}
);
Résultat :
0 11 8
Notez que le getMonth()
La méthode JavaScript renvoie le numéro du mois sous la forme d'un nombre entier, compris entre 0 et 11.
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 du mois, 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.getMonth();
return c;
}
);
Résultat :
[ 0, 11, 8 ]
Encore une fois, nous obtenons les mois sous forme d'entiers compris entre 0 et 11.