Dieser Artikel stellt 5 Möglichkeiten vor, den Sekundenteil von einem Date-Objekt in MongoDB zurückzugeben.
Beispieldaten
Angenommen, wir haben eine Sammlung namens cats
mit folgenden Dokumenten:
{ "_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") }
Die folgenden Beispiele demonstrieren verschiedene Optionen zum Zurückgeben des Sekundenteils von born
Bereich dieser Dokumente.
Die $second
Betreiber
Die $second
Der Operator wurde speziell entwickelt, um ein Dokument mit dem Sekundenteil eines bestimmten Datums zurückzugeben.
Wir können den folgenden Code ausführen, um den Sekundenteil von born
zurückzugeben Feld im obigen Dokument.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthSecond: { $second: "$born" }
}
}
]
)
Ergebnis:
{ "birthSecond" : 15 } { "birthSecond" : 20 } { "birthSecond" : 1 }
Sie können auch die Zeitzone angeben, wenn Sie $second
verwenden Operator.
Siehe MongoDB $second
für weitere Informationen und Beispiele.
Der $dateToString
Betreiber
Der $dateToString
-Operator konvertiert ein Datumsobjekt gemäß einem benutzerdefinierten Format in eine Zeichenfolge. Der Benutzer kann daher festlegen, dass bei Bedarf nur der Sekundenanteil zurückgegeben wird.
Es gibt Formatbezeichner für jeden Datumsteil. Der %S
Formatbezeichner gibt den zweiten Teil zurück (2 Ziffern, mit Nullen aufgefüllt).
Beispiel:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthSecond: { $dateToString: { format: "%S", date: "$born" } }
}
}
]
)
Ergebnis:
{ "birthSecond" : "15" } { "birthSecond" : "20" } { "birthSecond" : "01" }
Siehe MongoDB $dateToString
für weitere Informationen und Beispiele.
Die $dateToParts
Betreiber
Die $dateToParts
-Operator gibt ein Dokument zurück, das die Bestandteile eines bestimmten BSON-Datumswerts als einzelne Eigenschaften enthält. Die zurückgegebenen Eigenschaften sind year
, month
, day
, hour
, minute
, second
und millisecond
.
Wir könnten daher $dateToParts
verwenden in einer Pipelinestufe, fügen Sie dann eine weitere Pipelinestufe hinzu, die den second
extrahiert Teil.
Hier ist was $dateToParts
Renditen für unsere drei Dokumente:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
Ergebnis:
{ "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 } }
Dieses Ergebnis kann dann an die nächste Stufe in der Pipeline weitergegeben werden, und wir können daher nur den second
extrahieren Feld in der nächsten Stufe.
Folgendes passiert, wenn wir nur für die second
eine weitere Projektion hinzufügen Feld:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthSecond: "$dateParts.second"
}
}
]
)
Ergebnis:
{ "birthSecond" : 15 } { "birthSecond" : 20 } { "birthSecond" : 1 }
Wann immer Sie also $dateToParts
verwenden in Ihrer Pipeline haben Sie Zugriff auf den second
Feld (und die anderen Datumsteile) im nächsten Schritt.
Siehe MongoDB $dateToParts
für weitere Informationen und Beispiele.
Der forEach()
Methode
Sie können cursor.forEach()
verwenden um den Cursor mit einer JavaScript-Methode wie getSeconds()
zu durchlaufen oder getUTCSeconds()
um nur die Sekunden zurückzugeben.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCSeconds()
);
}
);
Ergebnis:
15 20 1
Der getUTCSeconds()
Die JavaScript-Methode gibt eine Ganzzahl zwischen 0 und 59 zurück, die die Sekunden des angegebenen Datums gemäß Weltzeit darstellt.
Das getSeconds()
-Methode gibt es in Ortszeit zurück.
Möglicherweise stellen Sie auch fest, dass die vorherigen Optionen ein ganzes Dokument zurückgeben, das ein Name/Wert-Paar enthält, während diese Option nur den tatsächlichen Sekundenwert und nicht das ganze Dokument zurückgibt.
Die map()
Methode
Die cursor.map()
Methode wendet eine Funktion auf jedes vom Cursor besuchte Dokument an und kombiniert die Werte in einem Array.
Beispiel:
db.cats.find().map(
function(c) {
c = c.born.getUTCSeconds();
return c;
}
);
Ergebnis:
[ 15, 20, 1 ]