Dokumenty jsou uloženy v přirozeném pořadí
Dokumenty jsou uloženy v sestupném pořadí podle data. Takže sbírka má jako první dokument 20140731.
Pokud nepoužíváte omezenou kolekci, neexistuje žádná záruka na uspořádání dokumentů na disku (také označované jako přirozený řád).
Mazání a přesuny dokumentů (když dokument přeroste svůj přidělený záznamový prostor) vytvoří místo na volném seznamu, který bude znovu použit.
Zde je rychlý příklad, který by to měl demonstrovat v mongo
shell:
// 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()
Pořadí výsledků
Když použiji příkaz find s filtry {$gte :20140720, $lte :20140731}, mongodb vrátí dotaz ve vzestupném pořadí podle pole "datum".
Pokud je pro dotaz použit index, jsou dokumenty vráceny v pořadí, v jakém se nacházejí v indexu. Toho byste měli využít při sestavování svých indexů pro běžné dotazy (viz:Použití indexů k řazení výsledků dotazů).
Pro informaci, jednoduchý index (např. na {date:1}
) lze použít k vrácení výsledků seřazených ve vzestupném nebo sestupném pořadí.
Řadit podle ObjectID
Pokud používáte výchozí ObjectID MongoDB pro _id
, můžete třídit podle { _id: 1 }
k přibližnému pořadí vložení od prvních 4 bajtů ObjectID
začlenit časové razítko. Pokud byste to chtěli použít pro řazení dotazu podle date
a přibližné pořadí vložení byste zajistili index na {date:1, _id:1}
.
Všimněte si, že ObjectID
s jsou obvykle generovány klientským ovladačem, takže pokud máte na aplikačních serverech časový posun (nebo _id
se vytvoří nějakou dobu před vložením dokumentu) ObjectID
s nemusí striktně odrážet "pořadí vložení" tak, jak je vidí server. Pokud je přesnost objednávky velmi důležitá, je obecně možné vygenerovat _id
na straně serveru (přístup se liší v závislosti na ovladači).