MongoDB ObjectId


In den vorherigen Kapiteln haben wir bereits MongoDBs ObjectId verwendet.

In diesem Kapitel lernen wir die Struktur von ObjectId kennen.

ObjectId ist ein 12-Byte-BSON-Datentyp mit folgendem Format:

  • Die ersten 4 Bytes repräsentieren den Zeitstempel
  • Die nächsten 3 Bytes sind der Maschinenkennungscode
  • Die nächsten zwei Bytes bestehen aus der Prozess-ID (PID)
  • Die letzten drei Bytes sind eine Zufallszahl.

In MongoDB gespeicherte Dokumente müssen einen Schlüssel "_id" besitzen. Der Wert dieses Schlüssels kann von beliebigem Typ sein und ist standardmäßig ein ObjectId-Objekt.

Innerhalb einer Collection hat jedes Dokument einen eindeutigen "_id"-Wert, wodurch sichergestellt wird, dass jedes Dokument in der Collection eindeutig identifiziert werden kann.

Der Hauptgrund, warum MongoDB ObjectId anstelle anderer herkömmlicher Verfahren (wie automatisch inkrementierender Primärschlüssel) verwendet, ist, dass die Synchronisierung automatisch inkrementierender Primärschlüsselwerte über mehrere Server hinweg sowohl mühsam als auch zeitaufwendig ist.


Neue ObjectId erstellen

Verwenden Sie den folgenden Code, um eine neue ObjectId zu generieren:

>newObjectId = ObjectId()

Die obige Anweisung gibt die folgende eindeutig generierte ID zurück:

ObjectId("5349b4ddd2781d08c09890f3")

Sie können die generierte ID auch verwenden, um die von MongoDB automatisch generierte ObjectId zu ersetzen:

>myObjectId = ObjectId("5349b4ddd2781d08c09890f4")

Zeitstempel der Dokumenterstellung

Da ObjectId einen 4-Byte-Zeitstempel speichert, müssen Sie kein Zeitstempelfeld für Ihre Dokumente speichern. Sie können die Funktion getTimestamp verwenden, um den Erstellungszeitpunkt des Dokuments abzurufen:

>ObjectId("5349b4ddd2781d08c09890f4").getTimestamp()

Der obige Code gibt den Erstellungszeitpunkt des Dokuments im ISO-Format zurück:

ISODate("2014-04-12T21:49:17Z")

ObjectId in String umwandeln

In manchen Fällen müssen Sie möglicherweise ObjectId in ein String-Format konvertieren. Sie können den folgenden Code verwenden:

>new ObjectId().str

Der obige Code gibt einen String im Guid-Format zurück:

5349b4ddd2781d08c09890f3
Andere Erweiterungen