Mulai Versi 2.6, MongoDB mempertahankan urutan kolom jika memungkinkan.
Namun, _id
bidang selalu didahulukan, mengganti nama bidang dapat menyebabkan pemesanan ulang. Namun, saya biasanya mencoba untuk tidak mengandalkan detail seperti ini. Seperti yang disebutkan dalam pertanyaan awal, ada juga lapisan tambahan untuk dipertimbangkan yang masing-masing harus memberikan semacam jaminan untuk stabilitas pesanan...
Jawaban Asli:
Tidak, MongoDB tidak menjamin urutan kolom :
Secara khusus, pembaruan di tempat yang mengubah ukuran dokumen biasanya akan mengubah urutan bidang. Misalnya, jika Anda $set
bidang yang nilai lama adalah jenis nomor dan nilai baru adalah NumberLong
, kolom biasanya diurutkan ulang.
Namun, array mempertahankan urutan dengan benar:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Saya tidak mengerti mengapa ini "jelek" dan "kembung" sama sekali. Menyimpan daftar objek kompleks tidak bisa lebih mudah. Namun, menyalahgunakan objek sebagai daftar jelas buruk:Objek memiliki semantik array asosiatif (yaitu hanya boleh ada satu bidang dari nama tertentu), sedangkan daftar/array tidak:
// not ok:
db.foo2.insert({"foo" : "bar", "foo" : "lala" });
db.foo2.find();
{ "_id" : ObjectId("4ef09cd9b37bc3cdb0e7fb26"), "foo" : "lala" }
// a list can do that
db.foo2.insert({ 'array' : [ {'foo' : 'bar'}, { 'foo' : 'lala' } ]});
db.foo2.find();
{ "_id" : ObjectId("4ef09e01b37bc3cdb0e7fb27"), "array" :
[ { "foo" : "bar" }, { "foo" : "lala" } ] }
Ingatlah bahwa MongoDB adalah database objek, bukan penyimpanan kunci/nilai.