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

Wie ordnet MongoDB seine Dokumente in einer Sammlung an?

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 })