Dit artikel presenteert 5 manieren om het secondengedeelte van een Date-object in MongoDB te retourneren.
Voorbeeldgegevens
Stel dat we een verzameling hebben met de naam cats
met de volgende documenten:
{ "_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") }
De volgende voorbeelden demonstreren verschillende opties voor het retourneren van het secondengedeelte van de born
veld van die documenten.
De $second
Operator
De $second
operator is speciaal ontworpen om een document terug te sturen met het secondengedeelte van een bepaalde datum.
We kunnen de volgende code uitvoeren om het secondengedeelte van de born
. te retourneren veld in bovenstaand document.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthSecond: { $second: "$born" }
}
}
]
)
Resultaat:
{ "birthSecond" : 15 } { "birthSecond" : 20 } { "birthSecond" : 1 }
U kunt ook de tijdzone specificeren bij gebruik van de $second
exploitant.
Zie MongoDB $second
voor meer informatie en voorbeelden.
De $dateToString
Operator
De $dateToString
operator converteert een datumobject naar een string volgens een door de gebruiker gespecificeerd formaat. De gebruiker kan daarom specificeren dat alleen het secondengedeelte wordt geretourneerd indien nodig.
Er zijn formaatspecificaties voor elk datumgedeelte. De %S
formaatspecificatie retourneert het tweede deel (2 cijfers, nul opgevuld).
Voorbeeld:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthSecond: { $dateToString: { format: "%S", date: "$born" } }
}
}
]
)
Resultaat:
{ "birthSecond" : "15" } { "birthSecond" : "20" } { "birthSecond" : "01" }
Zie MongoDB $dateToString
voor meer informatie en voorbeelden.
De $dateToParts
Operator
De $dateToParts
operator retourneert een document dat de samenstellende delen van een bepaalde BSON-datumwaarde als individuele eigenschappen bevat. De geretourneerde eigenschappen zijn year
, month
, day
, hour
, minute
, second
en millisecond
.
We zouden daarom $dateToParts
. kunnen gebruiken in één pijplijnfase, voeg vervolgens een andere pijplijnfase toe die de second
. extraheert onderdeel.
Dit is wat $dateToParts
retouren voor onze drie documenten:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
Resultaat:
{ "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 } }
Dit resultaat kan vervolgens worden doorgegeven aan de volgende fase in de pijplijn, en we kunnen daarom alleen de second
extraheren veld in de volgende fase.
Dit is wat er gebeurt als we nog een projectie toevoegen voor slechts de second
veld:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthSecond: "$dateParts.second"
}
}
]
)
Resultaat:
{ "birthSecond" : 15 } { "birthSecond" : 20 } { "birthSecond" : 1 }
Dus, wanneer u $dateToParts
. gebruikt in je pijplijn zit, heb je toegang tot de second
veld (en de andere datumdelen) in de volgende fase.
Zie MongoDB $dateToParts
voor meer informatie en voorbeelden.
De forEach()
Methode
U kunt cursor.forEach()
. gebruiken om door de cursor te lopen, met behulp van een JavaScript-methode zoals getSeconds()
of getUTCSeconds()
om alleen de seconden terug te geven.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCSeconds()
);
}
);
Resultaat:
15 20 1
De getUTCSeconds()
De JavaScript-methode retourneert een geheel getal tussen 0 en 59, dat de seconden in de opgegeven datum vertegenwoordigt volgens de universele tijd.
De getSeconds()
methode geeft het terug in lokale tijd.
U zult misschien ook merken dat de vorige opties een heel document retourneren dat een naam/waarde-paar bevat, terwijl deze optie alleen de werkelijke secondenwaarde retourneert en niet het hele document.
De map()
Methode
De cursor.map()
methode past een functie toe op elk document dat door de cursor wordt bezocht en combineert de waarden in een array.
Voorbeeld:
db.cats.find().map(
function(c) {
c = c.born.getUTCSeconds();
return c;
}
);
Resultaat:
[ 15, 20, 1 ]