Unterschied zwischen dem speichern eine ObjectId und seine string-form, in MongoDB
Ich bin ein wenig verwirrt von Mongo DB ist die Verwendung von ObjectIds. Sicher, Sie sind hervorragend für die Erstellung von IDs auf client-Seite, die fast gar nicht zu Konflikten mit anderen client-Seite erstellt-ids. Aber mongo scheint Sie in einigen besonderen Weise. Speichern eines string-Repräsentation der id verschiedenen speichern einer Objekt-id als Objekt. Warum ist das so?
Nicht die string-form haben alle die gleichen Informationen, die Objekt-form hat? Warum mongo gehen so weit, zu unterscheiden diese beiden Formen? Es schraubt mich auf, wenn ich versuche zu vergleichen _ids gesendet vom frontend zum Beispiel. Meine Datenbank ist in keiner Weise im Einklang mit, ob es speichert string-form-id oder Objekt-form-ids, und tho mein code ist sicherlich teilweise Schuld, ich meistens Schuld mongo für die Herstellung dieser so seltsam.
Bin ich falsch, dass das verrückt ist? Warum mongo tun es auf diese Weise?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich, persönlich, Schuld Ihrem code. Ich dies umgehen, und dieses dann perfekt fein in meine Anwendungen durch die Kodierung der richtige Weg. Ich konvertieren string in code zu vergleichen, und ich sicherstellen, dass alles, was aussieht wie ein
ObjectId
ist eigentlich als einObjectId
.Ist es gut zu beachten, dass zwischen den
ObjectId
(http://docs.mongodb.org/manual/reference/object-id/) und hex-Darstellung es ist in der Tat 12 bytes Unterschied, derObjectId
12 bytes und hex-Darstellung wird 24.Es ist nicht nur über storage-Effizienz, aber auch über Indizes, nicht nur weil Sie kleiner sind, sondern auch, da die
ObjectId
können verwendet werden in einer speziellen Art und Weise, um sicherzustellen, dass nur Teile des index sind geladen; die Teile, die verwendet werden. Dies wird am deutlichsten, wenn einfügen, wo nur der Letzte Teil, der index muss geladen werden, um Eindeutigkeit sicherzustellen. Sie können nicht garantieren, solches Verhalten mit Ihrer hex-Darstellung.Ich würde nicht empfehlen die Verwendung der
OjbectId
's hex-Darstellung. Wenn Sie wollen, "die Ihr Leben leichter machen" Sie wäre besser dran, die Schaffung einer anderen_id
kleiner ist aber irgendwie so einzigartig und index freundlich.ObjectId
beträgt 12 Byte, wenn es intern gespeichert, die ist kompakter als die hexadezimale string-Darstellung. Das sind zwei verschiedene Dinge.Können Sie Umfließen Ihre ganze DB und eine einheitliche
_id
Feld zu lösen und sicherzustellen, dass Ihr code speichert Sie im gleichen format.ObjectId
sind schnell zu generieren, die von MongoDB also ich würde verwenden, beim erstellen neuer Dokumente.ObjectId
vsObjectId.str
, aber MongoDB war wohl gebaut/getestet mit ObjectId verwenden wir also :D)_id
einen string (die MongoDB ermöglicht als use-case). Du nimmst auf diese Weise über Bord. Wenn Sie Primärschlüssel eine fortlaufende integer in MySQL-oder PostgreSQL Sie stellen Ganzzahlen wie 12345 Ihnen nicht, "12345" als string. MongoDB kann nicht erraten, Ihren Fall, denn Sie können nicht definieren ein schema, wie Sie auch in einem RDBMS, Fragen Sie nicht für die automatische Konvertierung. RDBMS können, weil Sie pre-definieren Sie ein schema. Auf MongoDB diese Dinge sind Links, um Ihren stack (z.B. web - /client -)ISODate
) nicht verwechselt werden. Diese Aufgaben fallen gewöhnlich in Ihren oberen stack, z.B. die REST-Schnittstelle, die einige Kenntnisse von dem, was zu erwarten ist (z.B. implizit durch eine schema-definition oder explizite Konvertierungen je nach coding style)mongoose
fürnode.js
wandelt diese Zeichenfolgen automatisch zumindest in einigen Fällen (wie bei der Suche nach_id
, wird es konvertiert den string zu einer ObjectId für Sie). Frage: angenommen, ich habe ein Feld, auf einige schema und können sagen, es heißtauthor_id
entspricht, die der Benutzer, der schrieb, dass post oder abgeben oder so etwas. Ist es am besten, um das Feld einObjectId
oder eineString
geben? (Bitte beachten, es wird auch ein index).