Dokumen disimpan dalam urutan alami
Dokumen disimpan dalam urutan menurun berdasarkan tanggal. Jadi koleksi tersebut memiliki 20140731 sebagai dokumen pertama.
Kecuali Anda menggunakan koleksi yang dibatasi, tidak ada jaminan untuk pemesanan dokumen pada disk (juga disebut sebagai tatanan alami).
Penghapusan dan pemindahan dokumen (ketika dokumen melebihi ruang rekaman yang dialokasikan) membuat ruang pada daftar gratis yang akan digunakan kembali.
Berikut adalah contoh cepat yang harus menunjukkan ini di mongo
cangkang:
// 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()
Urutan hasil
Saat saya menggunakan perintah find dengan filter {$gte :20140720, $lte :20140731}, mongodb mengembalikan kueri dalam urutan menaik dari bidang "tanggal".
Jika indeks digunakan untuk kueri, dokumen dikembalikan sesuai urutan ditemukan dalam indeks. Anda harus memanfaatkan ini saat membuat indeks untuk kueri umum (lihat:Menggunakan Indeks untuk Mengurutkan Hasil Kueri).
FYI, indeks sederhana (mis. pada {date:1}
) dapat digunakan untuk mengembalikan hasil yang diurutkan dalam urutan menaik atau menurun.
Urutkan berdasarkan ObjectID
Jika Anda menggunakan ObjectIDs default MongoDB untuk _id
, Anda dapat mengurutkan berdasarkan { _id: 1 }
untuk memperkirakan urutan penyisipan sejak 4 byte pertama ObjectID
memasukkan stempel waktu. Jika Anda ingin menggunakan ini untuk menyortir kueri berdasarkan date
dan perkiraan urutan penyisipan Anda akan memastikan indeks pada {date:1, _id:1}
.
Perhatikan bahwa ObjectID
s biasanya dihasilkan oleh driver klien, jadi jika Anda memiliki penyimpangan jam di server aplikasi Anda (atau _id
dibuat beberapa saat sebelum dokumen dimasukkan) ObjectID
s mungkin tidak sepenuhnya mencerminkan "urutan penyisipan" seperti yang terlihat oleh server. Jika akurasi urutan penyisipan sangat penting, biasanya dimungkinkan untuk menghasilkan _id
di sisi server (pendekatan bervariasi tergantung pada driver).