sql >> Databasteknik >  >> NoSQL >> MongoDB

Mongodb fynds returnerande dokumentbeställning

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




  1. MongoDB Aggregationsoperatörer för returdatumdelar

  2. Laravel Caching med Redis är väldigt långsam

  3. En översikt över MongoDB User Management

  4. Hur säger man till Mongo att sortera en samling innan man begränsar resultaten?