Denne artikel præsenterer 5 måder at returnere minutdelen fra et Dato-objekt i MongoDB.
Eksempel på data
Antag, at vi har en samling kaldet cats
med følgende dokumenter:
{ "_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") }
De følgende eksempler viser forskellige muligheder for at returnere minutdelen fra born
felt af disse dokumenter.
$minute
Operatør
$minute
operatør er specifikt designet til at returnere et dokument med referatdelen af en given dato.
Vi kan køre følgende kode for at returnere minutdelen fra born
felt i ovenstående dokument.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMinute: { $minute: "$born" }
}
}
]
)
Resultat:
{ "birthMinute" : 30 } { "birthMinute" : 0 } { "birthMinute" : 45 }
Du kan også angive tidszonen, når du bruger $minute
operatør.
Se MongoDB $minute
for mere information og eksempler.
$dateToString
Operatør
$dateToString
operator konverterer et datoobjekt til en streng i henhold til et brugerspecificeret format. Brugeren kan derfor angive, at kun minutportionen returneres, hvis det kræves.
Der er formatspecifikationer for hver datodel. %M
formatspecifikationen returnerer minutdelen.
Eksempel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMinute: { $dateToString: { format: "%M", date: "$born" } }
}
}
]
)
Resultat:
{ "birthMinute" : "30" } { "birthMinute" : "00" } { "birthMinute" : "45" }
Du kan også bruge %Z
for at returnere minutforskydningen fra UTC som et tal.
Se MongoDB $dateToString
for mere information og eksempler.
$dateToParts
Operatør
$dateToParts
operatør returnerer et dokument, der indeholder de bestanddele af en given BSON Date-værdi som individuelle egenskaber. De returnerede egenskaber er year
, month
, day
, hour
, minute
, second
og millisecond
.
Vi kunne derfor bruge $dateToParts
i et pipeline-trin, tilføj derefter et andet pipeline-trin, der uddrager minute
del.
Her er hvad $dateToParts
returnerer for vores tre dokumenter:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
Resultat:
{ "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 } }
Dette resultat kan derefter overføres til næste trin i pipelinen for at udtrække kun minute
felt.
Her er, hvad der sker, hvis vi tilføjer endnu en projektion i et minute
felt:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMinute: "$dateParts.minute"
}
}
]
)
Resultat:
{ "birthMinute" : 30 } { "birthMinute" : 0 } { "birthMinute" : 45 }
Så hvis du bruger $dateToParts
i din pipeline, vil du derefter have adgang til minute
felt (og alle andre felter) i næste fase.
Se MongoDB $dateToParts
for mere information og eksempler.
forEach()
Metode
Du kan bruge cursor.forEach()
at iterere gennem markøren ved at bruge en JavaScript-metode såsom getMinutes()
eller getUTCMinutes()
for at returnere blot minutterne.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMinutes()
);
}
);
Resultat:
30 0 45
getUTCMinutes()
JavaScript-metoden returnerer et heltal mellem 0 og 59, der repræsenterer minutterne på den givne dato i henhold til universel tid.
getMinutes()
metode returnerer det i lokal tid.
Du kan også bemærke, at de tidligere muligheder returnerer et helt dokument, der indeholder et navn/værdi-par, hvorimod denne indstilling kun returnerer den faktiske minutværdi og ikke hele dokumentet.
map()
Metode
cursor.map()
metoden anvender en funktion på hvert dokument, der besøges af markøren og kombinerer værdierne til en matrix.
Eksempel:
db.cats.find().map(
function(c) {
c = c.born.getUTCMinutes();
return c;
}
);
Resultat:
[ 30, 0, 45 ]