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.

  • 🔑 Hauptrolle: Das Feld _id ist der Primärschlüssel, der jedes Dokument in einem MongoDB Sammlung.
  • 🆔 Standard-Objekt-ID: Wenn Sie _id weglassen, MongoDB Fügt dem Dokument automatisch einen eindeutigen 12-Byte-ObjectId-Wert hinzu.
  • Zeitlich geordnet: Eine ObjectId beginnt mit einem 4-Byte-Zeitstempel, sodass IDs grob nach Erstellungszeit sortiert werden können.
  • ✍️ Benutzerdefinierte Tasten: Sie können beim Einfügen eines Dokuments einen eigenen _id-Wert angeben, z. B. eine Zahl oder eine Zeichenkette.
  • 🔒 Unveränderlich: Sobald der Wert für _id festgelegt ist, kann er nicht mehr geändert werden; Sie müssen ihn löschen und erneut einfügen, um ihn zu ändern.

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

Primärer Schlüssel eingeben MongoDB

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:

  1. 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:

Primärer Schlüssel eingeben MongoDB

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.

Häufig gestellte Fragen

Nein. Das Feld „_id“ ist nach der Erstellung eines Dokuments unveränderlich. Um es zu ändern, müssen Sie das bestehende Dokument löschen und ein neues mit dem gewünschten „_id“-Wert einfügen.

Das Feld „_id“ akzeptiert die meisten BSON-Datentypen, darunter ObjectId, Ganzzahlen, Zeichenketten und sogar eingebettete Dokumente. Die einzige Regel ist, dass der Wert innerhalb der Sammlung eindeutig sein muss und kein Array sein darf.

Ja. MongoDB Es wird automatisch ein eindeutiger Index für das Feld „_id“ jeder Sammlung erstellt. Dieser Index kann nicht gelöscht werden und ermöglicht sehr schnelle Suchvorgänge über den Primärschlüssel.

KI kann den Zeitstempel einer Objekt-ID erklären und Code generieren, um …tracDie Erstellungszeit mit getTimestamp() ermitteln und ObjectIds in Strings konvertieren, hilftping Entwickler können Dokumentkennungen schneller debuggen und verstehen.

Ja. Die KI kann Ihnen basierend auf Ihren Abfragemustern, Anforderungen an die Eindeutigkeit und Sharding-Plänen empfehlen, ob Sie die Standard-ObjectId beibehalten oder eine benutzerdefinierte _id wie eine E-Mail-Adresse oder eine UUID verwenden sollten.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: