Es heißt natürliche Ordnung :
natural order
Die Reihenfolge, in der die Datenbank auf Dokumente auf der Festplatte verweist. Dies ist die Standardsortierreihenfolge. Siehe $natural
und Return in Natural Order
.
Dies bestätigt, dass Sie sie im Allgemeinen in der gleichen Reihenfolge erhalten, in der Sie sie eingefügt haben, aber das ist nicht garantiert – wie Sie bemerkt haben.
Rückkehr in natürlicher Reihenfolge
Der $natural
-Parameter gibt Elemente gemäß ihrer natürlichen Reihenfolge innerhalb der Datenbank zurück. Diese Reihenfolge ist eine interne Implementierungsfunktion, und Sie sollten sich nicht auf eine bestimmte Struktur darin verlassen.
Indexnutzung
Abfragen, die eine Sortierung nach $natural
enthalten Reihenfolge nicht Verwenden Sie Indizes, um das Abfrageprädikat mit der folgenden Ausnahme zu erfüllen:Wenn das Abfrageprädikat eine Gleichheitsbedingung für die _id
ist Feld { _id: <value> }
, dann die Abfrage mit der Sortierung nach $natural
Bestellung kann die _id
verwenden index.
MMAPv1
Normalerweise spiegelt die natürliche Reihenfolge die Reihenfolge der Einfügungen wider, mit der folgenden Ausnahme für die MMAPv1-Speicher-Engine. Für die MMAPv1-Speicher-Engine spiegelt die natürliche Reihenfolge nicht die Einfügungsreihenfolge wider, wenn die Dokumente aufgrund des Dokumentenwachstums verschoben werden oder Löschvorgänge Speicherplatz freigeben, der dann von neu eingefügten Dokumenten belegt wird.
Offensichtlich sollten Sie, wie in den erwähnten Dokumenten, nicht Verlassen Sie sich auf diese Standardreihenfolge (Diese Reihenfolge ist eine interne Implementierungsfunktion, und Sie sollten sich nicht auf eine bestimmte Struktur darin verlassen. ).
Wenn Sie die Dinge sortieren müssen, verwenden Sie die Sortierlösungen.
Grundsätzlich sollten die folgenden beiden Aufrufe Dokumente in derselben Reihenfolge zurückgeben (da die Standardreihenfolge $natural
ist ):
db.mycollection.find().sort({ "$natural": 1 })
db.mycollection.find()
Wenn Sie nach einem anderen Feld sortieren möchten (z. B. name
) können Sie das tun:
db.mycollection.find().sort({ "name": 1 })