Apakah urutan pengurutan default ketika tidak ada yang ditentukan?
Urutan pengurutan internal default (atau urutan alami) adalah tidak ditentukan rincian implementasi. Mempertahankan pesanan adalah biaya tambahan untuk mesin penyimpanan dan API MongoDB tidak mengamanatkan prediktabilitas di luar sort()
eksplisit atau kasus khusus koleksi terbatas berukuran tetap yang memiliki batasan penggunaan terkait. Untuk beban kerja biasa, sebaiknya mesin penyimpanan mencoba menggunakan kembali ruang pra-alokasi yang tersedia dan membuat keputusan tentang cara paling efisien menyimpan data di disk dan di memori.
Tanpa kriteria kueri apa pun, hasil akan dikembalikan oleh mesin penyimpanan dalam urutan alami (alias dalam urutan ditemukan ). Urutan hasil mungkin bertepatan dengan urutan penyisipan tetapi perilaku ini tidak dijamin dan tidak dapat diandalkan (selain dari koleksi yang dibatasi).
Beberapa contoh yang dapat mempengaruhi urutan penyimpanan (alami):
- WiredTiger menggunakan representasi dokumen yang berbeda pada disk versus cache dalam memori, sehingga urutan alami dapat berubah berdasarkan struktur data internal.
- Mesin penyimpanan MMAPv1 asli (dihapus di MongoDB 4.2) mengalokasikan ruang rekaman untuk dokumen berdasarkan aturan padding. Jika dokumen melebihi ruang rekaman yang dialokasikan saat ini, lokasi dokumen (dan urutan alami) akan terpengaruh. Dokumen baru juga dapat dimasukkan ke dalam penyimpanan yang ditandai tersedia untuk digunakan kembali karena dokumen yang dihapus atau dipindahkan.
- Replikasi menggunakan format oplog idempoten untuk menerapkan operasi tulis secara konsisten di seluruh anggota kumpulan replika. Setiap anggota kumpulan replika memelihara file data lokal yang dapat bervariasi dalam urutan alami, tetapi akan memiliki hasil data yang sama ketika pembaruan oplog diterapkan.
Bagaimana jika indeks digunakan?
Jika indeks digunakan, dokumen akan dikembalikan sesuai urutan ditemukannya (yang tentu cocok dengan urutan penyisipan atau urutan I/O). Jika lebih dari satu indeks digunakan maka urutannya tergantung secara internal pada indeks mana yang pertama kali mengidentifikasi dokumen selama proses de-duplikasi.
Jika Anda menginginkan urutan pengurutan yang dapat diprediksi, Anda harus sertakan sort()
explicit eksplisit dengan kueri Anda dan memiliki nilai unik untuk kunci pengurutan Anda.
Bagaimana koleksi yang dibatasi mempertahankan urutan penyisipan?
Pengecualian implementasi yang dicatat untuk tatanan alami dalam koleksi yang dibatasi diberlakukan oleh batasan penggunaan khusus mereka:dokumen disimpan dalam urutan penyisipan tetapi ukuran dokumen yang ada tidak dapat ditingkatkan dan dokumen tidak dapat dihapus secara eksplisit. Pemesanan adalah bagian dari desain koleksi terbatas yang memastikan dokumen tertua "menua" terlebih dahulu.