MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $Jahr

In MongoDB das $year Der Aggregations-Pipeline-Operator gibt den Jahresteil eines bestimmten Datums zurück.

Bei Verwendung von $year -Operator können Sie optional eine Zeitzone angeben, die für das Ergebnis verwendet werden soll.

Das $year -Operator akzeptiert entweder ein Datum (entweder als Date, Timestamp oder ObjectId) oder ein Dokument, das das zu verwendende Datum und die zu verwendende Zeitzone angibt.

Beispiel

Angenommen, wir haben eine Sammlung namens pets mit folgendem Dokument:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Wir können den folgenden Code ausführen, um das Jahr von born zurückzugeben Feld in diesem Dokument.

db.pets.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthYear: { $year: "$born" }
        }
    }
  ]
)

Ergebnis:

{ "birthYear" : 2020 } 

Wir können das Jahr 2020 sehen ist zurück gekommen.

Hier habe ich birthYear verwendet als zurückzugebender Feldname, aber das hätte alles sein können (wie yearBorn , year , etc).

Die _id Das Feld wird standardmäßig zurückgegeben, wenn Projektionen in MongoDB verwendet werden, aber in diesem Beispiel habe ich die _id explizit ausgeblendet Feld mit _id: 0 .

Geben Sie eine Zeitzone an

Sie können eine Zeitzone angeben, die für die Ausgabe von $year verwendet werden soll Betreiber.

Wenn Sie dies tun, wird das Argument an $year übergeben muss folgende Form haben:

{ date: <dateExpression>, timezone: <tzExpression> }

Wobei <dateExpression> ist das zu verwendende Datum und <tzExpression> ist die zu verwendende Zeitzone.

Die Zeitzone kann entweder mit der Olson-Zeitzonenkennung (z. B. "Europe/London" , "GMT" ) oder den UTC-Offset (z. B. "+02:30"). , "-1030" ).

Olson-Zeitzonenkennung

Hier ist ein Beispiel, das das Jahr in zwei verschiedenen Zeitzonen ausgibt, die jeweils die Olson-Zeitzonen-IDs verwenden:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          honolulu: { 
            $year: { date: "$born", timezone: "Pacific/Honolulu" }
            },
          auckland: { 
            $year: { date: "$born", timezone: "Pacific/Auckland" }
            }
        }
    }
  ]
)

Ergebnis:

{ "honolulu" : 2020, "auckland" : 2021 } 

In diesem Fall verschiebt sich das Datum bei Verwendung von Pacific/Auckland auf das nächste Jahr Zeitzone.

UTC-Offset

Hier ist das gleiche Beispiel, außer dass wir diesmal den UTC-Offset verwenden.

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset-1000": { 
            $year: { date: "$born", timezone: "-1000" }
            },
          "utcOffset+1200": { 
            $year: { date: "$born", timezone: "+1200" }
            }
        }
    }
  ]
)

Ergebnis:

{ "utcOffset-1000" : 2020, "utcOffset+1200" : 2021 }

Gib das Jahr aus einer ObjectId zurück

Sie können $year verwenden um den Jahresteil von einer ObjectId zurückzugeben.

ObjectId-Werte sind 12-Byte-Hexadezimalwerte, die aus Folgendem bestehen:

  • Ein 4-Byte-Zeitstempelwert, der die Erstellung der ObjectId darstellt, gemessen in Sekunden seit der Unix-Epoche.
  • Ein 5 Byte ist ein Zufallswert
  • Ein 3-Byte-Zähler, der auf einen zufälligen Wert initialisiert wird.

Zusammenfassend sieht unser Dokument so aus:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Dieses Dokument enthält eine ObjectId. Wir können daher $year verwenden um das Jahr zurückzugeben, in dem unser Dokument erstellt wurde (oder genauer gesagt, wann die _id der ObjectId-Wert des Felds wurde erstellt).

Beispiel:

db.pets.aggregate(
  [
    {
      $project:
        {
          "timeStamp": { $toDate: "$_id"},
          "year": { $year: "$_id" }
        }
    }
  ]
).pretty()

Ergebnis:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"timeStamp" : ISODate("2021-01-19T01:11:35Z"),
	"year" : 2021
}

Wir können sehen, dass das Dokument im Jahr 2021 erstellt wurde.

In diesem Fall habe ich auch den $toDate verwendet Aggregations-Pipeline-Operator, um den Zeitstempelteil der ObjectId zurückzugeben.

ISO-Jahr

Sie können auch $isoWeekYear verwenden -Operator, um das ISO-Jahr mit Wochennummerierung zurückzugeben (d. h. die Jahreszahl im ISO 8601-Format).