Mongodb-Primärschlüssel: Beispiel zum Festlegen des _id-Felds mit ObjectId()
⚡ Intelligente Zusammenfassung
MongoDB Der Primärschlüssel ist das Feld „_id“, das jedes Dokument in einer Sammlung eindeutig identifiziert. Standardmäßig enthält es eine automatisch generierte Objekt-ID, Sie können dem Feld „_id“ aber auch beim Einfügen eines Dokuments einen eigenen Wert zuweisen.

Was ist der Primärschlüssel? MongoDB?
In MongoDB, _id-Feld als Primärschlüssel für die Sammlung, damit jedes Dokument in der Sammlung eindeutig identifiziert werden kann. Das Feld _id enthält einen eindeutigen ObjectID-Wert.
Wenn Sie beim Einfügen von Dokumenten in die Sammlung standardmäßig keinen Feldnamen mit der _id im Feldnamen hinzufügen, dann MongoDB fügt automatisch ein Objekt-ID-Feld hinzu, wie unten gezeigt
Wenn Sie die Dokumente in einer Sammlung abfragen, können Sie die ObjectId für jedes Dokument in der Sammlung sehen.
Wenn Sie das sicherstellen wollen MongoDB erstellt das _id-Feld nicht, wenn die Sammlung erstellt wird. Wenn Sie Ihre eigene ID als _id der Sammlung angeben möchten, müssen Sie dies beim Erstellen der Sammlung explizit definieren.
Wenn Sie explizit ein ID-Feld erstellen, muss es mit _id im Namen erstellt werden.
Schauen wir uns ein Beispiel an, wie wir dies erreichen können.
db.Employee.insert({_id:10, "EmployeeName" : "Smith"})
Code Erläuterung:
- Wir gehen davon aus, dass wir das erste Dokument in der Sammlung erstellen und definieren daher in der obigen Anweisung beim Erstellen der Sammlung explizit das Feld _id und definieren einen Wert dafür.
Wenn der Befehl erfolgreich ausgeführt wurde und Sie nun den Befehl „find“ verwenden, um die Dokumente in der Sammlung anzuzeigen, wird die folgende Ausgabe angezeigt
Ausgang:
Die Ausgabe zeigt deutlich, dass das _id-Feld, das wir beim Erstellen der Sammlung definiert haben, jetzt als Primärschlüssel für die Sammlung verwendet wird.
Was ist ObjectId in MongoDB?
Eine ObjectId ist der Standardwerttyp, der MongoDB weist dem Primärschlüssel _id einen Wert zu. Es handelt sich um einen 12-Byte-Identifikator, der server- und sammlungsübergreifend global eindeutig sein soll, sodass zwei Dokumente nahezu nie denselben Wert erhalten. Da der Clienttreiber eine ObjectId generieren kann, ohne den Server zu kontaktieren, MongoDB Dokumente können schnell eingefügt und die Skalierung auf viele Maschinen ohne zentralen Zähler durchgeführt werden.
Jede ObjectId wird in kompakter Binärform gespeichert, aber als 24-stellige Hexadezimalzeichenkette angezeigt, beispielsweise ObjectId(“507f1f77bcf86cd799439011”). Die ersten Bytes basieren auf der aktuellen Zeit, d. h. die Werte steigen mit der Erstellung neuer Dokumente kontinuierlich an. Dadurch ist die ObjectId nicht nur eindeutig, sondern auch annähernd nach Einfügereihenfolge sortierbar – eine nützliche Eigenschaft, wenn die neuesten oder ältesten Datensätze zuerst angezeigt werden sollen.
Struktur eines MongoDB Objekt Identifikation
A MongoDB Die ObjectId ist exakt 12 Byte lang, und jeder Teil hat eine spezifische Bedeutung. Das Verständnis der Struktur hilft zu erklären, warum ObjectIds eindeutig und zeitlich geordnet sind:
- 4-Byte-Zeitstempel: Die Anzahl der Sekunden seit der Unix-Epoche, die den Zeitpunkt der Erstellung der Objekt-ID festhält. Dadurch lassen sich IDs nach Zeit sortieren.
- 5-Byte-Zufallswert: Ein Wert, der einmal pro Prozess generiert wird und die Maschinen- und Prozessidentität kombiniert, sodass verschiedene Clients unterschiedliche IDs erzeugen.
- 3-Byte-Inkrementzähler: Ein Zähler, der mit einem zufälligen Wert beginnt und sich mit jeder neuen ObjectId in derselben Sekunde erhöht, um Kollisionen bei schnellen Einfügungen zu verhindern.
Zusammen gewährleisten diese drei Komponenten, dass jede ObjectId eindeutig ist, selbst wenn viele Dokumente gleichzeitig auf verschiedenen Servern eingefügt werden. Sie können den eingebetteten Erstellungszeitpunkt jederzeit mit der Methode `getTimestamp()` einer ObjectId auslesen.
Vorteile der Verwendung von ObjectId als Primärschlüssel
Die Verwendung der Standard-ObjectId als _id-Primärschlüssel bietet mehrere praktische Vorteile, weshalb die meisten MongoDB Sammlungen sind darauf angewiesen:
- Automatische Generierung: Sie müssen die Schlüsselwerte nicht selbst erstellen oder verwalten, wodurch die Wahrscheinlichkeit doppelter Schlüssel verringert wird.
- Globale Einzigartigkeit: ObjectIds bleiben serverübergreifend eindeutig, daher eignen sie sich gut für verteilte und fragmentierte Bereitstellungen.
- Eingebauter Zeitstempel: Die integrierte Erstellungszeit ermöglicht es Ihnen, Dokumente nach Alter zu sortieren oder zu filtern, ohne dass ein zusätzliches Datumsfeld erforderlich ist.
- Hochleistung: Die clientseitige Generierung vermeidet einen Roundtrip zum Server, hältping Lässt sich schnell einsetzen.
Obwohl ObjectId für die meisten Anwendungen geeignet ist, können Sie auch eine benutzerdefinierte _id wählen, beispielsweise eine E-Mail-Adresse oder einen Produktcode, wenn ein natürlicher Geschäftsschlüssel Abfragen vereinfacht. Die richtige Wahl hängt davon ab, wie Sie Ihre Daten suchen und verknüpfen möchten.


