Документите се съхраняват в естествен ред
Документите се съхраняват в низходящ ред според датата. Така колекцията има 20140731 като първи документ.
Освен ако не използвате ограничена колекция, няма гаранция за подреждането на документи на диска (наричано още естествен ред).
Изтриванията и преместванията на документи (когато даден документ надвишава разпределеното му пространство за запис) създават място в свободния списък, което ще бъде използвано повторно.
Ето един бърз пример, който трябва да демонстрира това в mongo
обвивка:
// 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()
Последователност на резултатите
Когато използвам командата find с филтри {$gte :20140720, $lte :20140731}, mongodb връща обратно заявката във възходящ ред на полето "date".
Ако за заявка се използва индекс, документите се връщат в реда, в който са намерени в индекса. Трябва да се възползвате от това, когато създавате вашите индекси за често срещани заявки (вижте:Използване на индекси за сортиране на резултатите от заявките).
FYI, прост индекс (напр. на {date:1}
) може да се използва за връщане на резултатите, сортирани във възходящ или низходящ ред.
Сортиране по ObjectID
Ако използвате по подразбиране ObjectID на MongoDB за _id
, можете да сортирате по { _id: 1 }
за приблизителен ред на вмъкване от първите 4 байта на ObjectID
включете времева марка. Ако искате да използвате това за сортиране на заявка въз основа на date
и приблизителен ред на вмъкване, ще осигурите индекс на {date:1, _id:1}
.
Обърнете внимание, че ObjectID
s обикновено се генерират от клиентския драйвер, така че ако имате отклонение на часовника на вашите сървъри на приложения (или _id
се създава известно време преди вмъкването на документа) ObjectID
s може да не отразява строго "реда на вмъкване", както се вижда от сървъра. Ако точността на реда за вмъкване е много важна, обикновено е възможно да се генерира _id
от страна на сървъра (подходът варира в зависимост от драйвера).