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

Mongodb findet die Rückgabe der Dokumentenbestellung

Dokumente werden in natürlicher Reihenfolge gespeichert

Die Dokumente werden in absteigender Reihenfolge nach Datum gespeichert. Die Sammlung hat also 20140731 als erstes Dokument.

Sofern Sie keine begrenzte Sammlung verwenden, gibt es keine Garantie für die Reihenfolge der Dokumente auf der Festplatte (auch als natürliche Reihenfolge bezeichnet).

Das Löschen und Verschieben von Dokumenten (wenn ein Dokument den zugewiesenen Datensatzplatz überschreitet) schafft Platz auf der freien Liste, der wiederverwendet wird.

Hier ist ein kurzes Beispiel, das dies im mongo demonstrieren soll Schale:

// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()

// Add some test data
for (i=0; i<1000; i++) {
    db.order.insert({'i': i})
}

// Looks like insertion order! (0..9)
db.order.find({}).limit(10);

// Pause 5s for effect :)
sleep(5000);

// Remove half the entries
db.order.remove({ i: { $lt: 500 }})

// Re-add the missing entries
for (i=0; i<500; i++) {
    db.order.insert({'i': i})
}

// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)

// Clean up demodb
db.dropDatabase()

Reihenfolge der Ergebnisse

Wenn ich den find-Befehl mit Filtern verwende {$gte :20140720, $lte :20140731}, gibt mongodb die Abfrage in aufsteigender Reihenfolge des "date"-Felds zurück.

Wenn ein Index für eine Abfrage verwendet wird, werden die Dokumente in der Reihenfolge zurückgegeben, in der sie im Index gefunden wurden. Sie sollten dies nutzen, wenn Sie Ihre Indizes für häufige Abfragen erstellen (siehe:Verwenden Sie Indizes zum Sortieren von Abfrageergebnissen).

FYI, ein einfacher Index (zB am {date:1} ) können verwendet werden, um die Ergebnisse in aufsteigender oder absteigender Reihenfolge sortiert zurückzugeben.

Nach Objekt-ID sortieren

Wenn Sie die standardmäßigen ObjectIDs von MongoDB für _id verwenden , können Sie nach { _id: 1 } sortieren um die Reihenfolge der Einfügungen seit den ersten 4 Bytes der ObjectID anzunähern einen Zeitstempel einbinden. Wenn Sie dies zum Sortieren einer Abfrage nach date verwenden möchten und die ungefähre Reihenfolge der Anzeigen, würden Sie einen Index am {date:1, _id:1} sicherstellen .

Beachten Sie, dass ObjectID s werden normalerweise vom Client-Treiber generiert, wenn Sie also auf Ihren App-Servern eine Zeitabweichung haben (oder die _id einige Zeit vor dem Einfügen des Dokuments erstellt wird) die ObjectID s geben möglicherweise nicht genau die "Einfügungsreihenfolge" wieder, wie sie vom Server gesehen wird. Wenn die Genauigkeit der Anzeigenreihenfolge sehr wichtig ist, ist es im Allgemeinen möglich, die _id zu generieren auf der Serverseite (Ansatz variiert je nach Treiber).