Unterschied zwischen den Feldern "id" und "_id" in MongoDB

Antworten:

60

Ich gehe davon aus, dass es nur ein Tippfehler in der Dokumentation ist. Das _idFeld ist der Primärschlüssel für jedes Dokument. Es heißt _idund ist auch über erreichbar id. Der Versuch, einen idSchlüssel zu verwenden, kann zu einem illegal ObjectId formatFehler führen.

Dieser Abschnitt zeigt lediglich an, dass die automatisch generierten ObjectIDs mit einem Zeitstempel beginnen, sodass Sie Ihre Dokumente automatisch sortieren können. Das ist ziemlich cool, da das _idautomatisch in jeder Sammlung indiziert wird. Weitere Informationen finden Sie unter http://www.mongodb.org/display/DOCS/Object+IDs . Speziell unter "BSON ObjectID Specification".

Eine BSON-Objekt-ID ist ein 12-Byte-Wert, der aus einem 4-Byte-Zeitstempel (Sekunden seit der Epoche), einer 3-Byte-Maschinen-ID, einer 2-Byte-Prozess-ID und einem 3-Byte-Zähler besteht. Beachten Sie, dass die Zeitstempel- und Zählerfelder im Gegensatz zum Rest von BSON Big Endian gespeichert werden müssen.

Leonard Garvey
quelle
7
ist das _idfür jedes Dokument einer Sammlung obligatorisch? Mit anderen Worten, kann ich ein neues Dokument ohne das _idFeld erstellen ?
Kevin Meredith
4
@ KevinMeredith Wie hier angegeben , ist ein _idFeld obligatorisch. «In MongoDB benötigt jedes in einer Sammlung gespeicherte Dokument ein eindeutiges _idFeld, das als Primärschlüssel fungiert. Wenn ein eingefügtes Dokument das _idFeld weglässt , generiert der MongoDB-Treiber automatisch ein ObjectIdfür das _idFeld ».
BowPark
15

Das _idFeld ist das Standardfeld für Bson ObjectIds und standardmäßig indiziert.

_idund id sind nicht dasselbe. Sie können auch ein Feld mit dem Namen hinzufügen, idwenn Sie möchten. Es handelt sich jedoch nicht um einen Index, es sei denn, Sie fügen einen Index hinzu.

Es ist nur ein Tippfehler in den Dokumenten.

Bryan Migliorisi
quelle
4

Meine zwei Cent:

Das Feld _id

MongoDBWeist _idjedem Dokument ein Feld zu und weist ihm einen Primärindex zu. Es gibt Möglichkeiten, wie wir auch Sekundärindizes anwenden können. Erstellt standardmäßig MongoDBWerte für das _idFeld Typ ObjectID. Dieser Wert ist in der BSONSpezifikation definiert und folgendermaßen strukturiert:

ObjectID (12 Byte HEX-Zeichenfolge) = Datum (4 Byte, ein Zeitstempelwert, der die Anzahl der Sekunden seit der Unix-Epoche darstellt) + MAC-Adresse (3 Byte) + PID (2 Byte) + Zähler (3 Byte)

Zameer Ansari
quelle