MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

mongodb-Sortierreihenfolge auf _id

Um das, was Andre gesagt hat, etwas zu erweitern:

Da der ObjectID-Zeitstempel nur sekundengenau ist, könnten problemlos zwei (oder mehr) ObjectIDs mit demselben Wert für den Zeitstempel (die ersten 4 Bytes) erstellt werden. Wenn diese auf derselben Maschine (Maschinen-ID - die nächsten 3 Bytes) durch denselben Prozess (PID - die nächsten 2 Bytes) erstellt wurden, wäre das einzige, was sie unterscheidet, das "inc" -Feld, die letzten 3 Bytes am Ende.

Aktualisierung:Januar 2020

Diese Antwort ist weiterhin beliebt, daher lohnt es sich, sie ein wenig zu aktualisieren. Die ObjectID-Spezifikation hat sich weiterentwickelt, seit diese Antwort vor 8 Jahren geschrieben wurde, und die 5 Bytes nach dem Zeitstempel sind jetzt einfach zufällig, was die Wahrscheinlichkeit von Kollisionen erheblich verringert. Die letzten drei Bytes sind immer noch inkrementell, aber zu Beginn mit einem zufälligen Wert initialisiert, was wiederum Kollisionen weniger wahrscheinlich macht. Die ObjectID enthält jetzt weniger Kontext (man kann nicht leicht sagen, wo sie generiert wurde und durch welchen Prozess), aber ich würde vermuten, dass die Informationen nicht sinnvoll verwendet wurden und zugunsten einer besseren Randomisierung der ID veraltet sind.

Aktualisierung beenden

Siehe hier für die vollständige Spezifikation:

https://docs.mongodb.com/manual/reference/method/ObjectId/#ObjectIDs-BSONObjectIDSpecification

Dieses "inc"-Feld ist entweder ein sich ständig erhöhendes Feld (dann können Sie vernünftigerweise davon ausgehen, dass die Sortierung in der Einfüge-/Erstellungsreihenfolge erfolgt) oder ein zufälliger Wert (dann wahrscheinlich eindeutig, aber nicht geordnet), vorausgesetzt, die Spezifikation wird natürlich korrekt implementiert . Beachten Sie, dass die ObjectIDs möglicherweise vom Treiber oder der Anwendung (oder tatsächlich manuell) und nicht von MongoDB selbst generiert werden. Wenn Sie also nicht die volle Kontrolle darüber haben, wie sie generiert werden, können einige oder alle der oben genannten Punkte zutreffen.