I documenti sono archiviati in ordine naturale
I documenti vengono archiviati in ordine decrescente in base alla data. Quindi la collezione ha 20140731 come primo documento.
A meno che tu non stia utilizzando una raccolta limitata, non vi è alcuna garanzia per l'ordinamento dei documenti su disco (denominato anche ordine naturale).
Le eliminazioni e gli spostamenti di documenti (quando un documento supera lo spazio di registrazione allocato) creano spazio nell'elenco libero che verrà riutilizzato.
Ecco un rapido esempio che dovrebbe dimostrarlo nel mongo
guscio:
// 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()
Ordine dei risultati
Quando utilizzo il comando trova con i filtri {$gte :20140720, $lte :20140731}, mongodb restituisce la query in ordine crescente del campo "data".
Se viene utilizzato un indice per una query, i documenti vengono restituiti nell'ordine in cui si trovano nell'indice. Dovresti trarne vantaggio quando costruisci i tuoi indici per query comuni (vedi:Usa gli indici per ordinare i risultati delle query).
Cordiali saluti, un semplice indice (ad es. su {date:1}
) può essere utilizzato per restituire i risultati in ordine crescente o decrescente.
Ordina per ObjectID
Se stai utilizzando gli ObjectID predefiniti di MongoDB per _id
, puoi ordinare per { _id: 1 }
per approssimare l'ordine di inserimento dai primi 4 byte dell'ObjectID
incorporare un timestamp. Se si desidera utilizzarlo per ordinare una query in base a date
e l'ordine di inserzione approssimativo garantiresti un indice su {date:1, _id:1}
.
Nota che ObjectID
Le s sono in genere generate dal driver client, quindi se hai una variazione dell'orologio sui tuoi server delle app (o il _id
viene creato un po' di tempo prima dell'inserimento del documento) il ObjectID
s potrebbe non riflettere rigorosamente l'"ordine di inserimento" visto dal server. Se la precisione dell'ordine di inserzione è molto importante, è generalmente possibile generare il _id
lato server (l'approccio varia a seconda del driver).