sql >> Database teknologi >  >> NoSQL >> MongoDB

Mongodb finds returnerende dokumentbestilling

Dokumenter gemmes i naturlig rækkefølge

Dokumenterne gemmes i faldende rækkefølge baseret på dato. Så samlingen har 20140731 som det første dokument.

Medmindre du bruger en begrænset samling, er der ingen garanti for bestilling af dokumenter på disk (også kaldet naturlig rækkefølge).

Sletninger og flytninger af dokumenter (når et dokument vokser ud af dets tildelte registreringsplads) skaber plads på den frie liste, som vil blive genbrugt.

Her er et hurtigt eksempel, som skulle demonstrere dette 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()

Rækkefølge af resultater

Når jeg bruger find-kommandoen med filtre {$gte :20140720, $lte :20140731}, returnerer mongodb forespørgslen i stigende rækkefølge efter "dato"-feltet.

Hvis et indeks bruges til en forespørgsel, returneres dokumenterne i den rækkefølge, de findes i indekset. Du bør drage fordel af dette, når du opbygger dine indekser til almindelige forespørgsler (se:Brug indekser til at sortere forespørgselsresultater).

FYI, et simpelt indeks (f.eks. på {date:1} ) kan bruges til at returnere resultaterne sorteret i enten stigende eller faldende rækkefølge.

Sortér efter ObjectID

Hvis du bruger MongoDB's standard ObjectID'er for _id , kan du sortere efter { _id: 1 } for at tilnærme indsættelsesrækkefølgen siden de første 4 bytes af ObjectID indarbejde et tidsstempel. Hvis du ville bruge dette til at sortere en forespørgsel baseret på date og omtrentlig indsættelsesrækkefølge vil du sikre et indeks på {date:1, _id:1} .

Bemærk, at ObjectID s genereres typisk af klientdriveren, så hvis du har clock drift på dine app-servere (eller _id oprettes nogen tid før dokumentet indsættes) ObjectID s afspejler muligvis ikke strengt "indsættelsesrækkefølge" som set af serveren. Hvis nøjagtigheden af ​​indsættelsesrækkefølgen er meget vigtig, er det generelt muligt at generere _id på serversiden (tilgangen varierer afhængigt af driveren).




  1. Lagring af returværdien for node.js setTimeout i redis

  2. Laravel Echo Server, Redis, Socket.IO:Kan ikke få dem til at virke

  3. Hvordan sender socket.io beskeder på tværs af flere servere?

  4. Mongodb find oprettede resultater efter dato i dag