Dokument lagras i naturlig ordning
Dokumenten lagras i fallande ordning baserat på datum. Så samlingen har 20140731 som första dokument.
Såvida du inte använder en begränsad samling finns det ingen garanti för beställning av dokument på disk (kallas även naturlig ordning).
Raderingar och flyttningar av dokument (när ett dokument växer ur sitt tilldelade postutrymme) skapar utrymme på den fria listan som kommer att återanvändas.
Här är ett snabbt exempel som borde visa detta i mongo
skal:
// 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()
Ordning av resultat
När jag använder kommandot find med filter {$gte :20140720, $lte :20140731}, returnerar mongodb frågan i stigande ordning efter "datum"-fältet.
Om ett index används för en fråga, returneras dokumenten i den ordning de finns i indexet. Du bör dra fördel av detta när du bygger dina index för vanliga frågor (se:Använd index för att sortera frågeresultat).
FYI, ett enkelt index (t.ex. på {date:1}
) kan användas för att returnera resultaten sorterade i antingen stigande eller fallande ordning.
Sortera efter objekt-ID
Om du använder MongoDB:s standardobjekt-ID för _id
, kan du sortera efter { _id: 1 }
för att uppskatta insättningsordningen sedan de första 4 byten av ObjectID
inkludera en tidsstämpel. Om du ville använda detta för att sortera en fråga baserat på date
och ungefärlig insättningsordning du skulle säkerställa ett index på {date:1, _id:1}
.
Observera att ObjectID
s genereras vanligtvis av klientdrivrutinen, så om du har klockdrift på dina appservrar (eller _id
skapas en tid innan dokumentet infogas) ObjectID
s kanske inte strikt återspeglar "insättningsordning" som ses av servern. Om noggrannheten i insättningsordningen är mycket viktig är det i allmänhet möjligt att generera _id
på serversidan (tillvägagångssättet varierar beroende på drivrutinen).