Dalla versione 2.6 in poi, MongoDB conserva l'ordine dei campi ove possibile.
Tuttavia, il _id
il campo viene sempre prima e la ridenominazione dei campi può portare al riordino. Tuttavia, generalmente cercherei di non fare affidamento su dettagli come questo. Come menziona la domanda originale, ci sono anche livelli aggiuntivi da considerare, ognuno dei quali deve fornire una sorta di garanzia per la stabilità dell'ordine...
Risposta originale:
No, MongoDB non fornisce garanzie sull'ordinamento dei campi :
In particolare, gli aggiornamenti sul posto che modificano le dimensioni del documento di solito cambiano l'ordine dei campi. Ad esempio, se $set
un campo il cui vecchio valore era di tipo numero e il nuovo valore è NumberLong
, i campi di solito vengono riordinati.
Tuttavia, gli array mantengono l'ordine corretto:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Non vedo perché questo sia "brutto" e "gonfio". La memorizzazione di un elenco di oggetti complessi non potrebbe essere più semplice. Tuttavia, abusare di oggetti come elenchi è decisamente brutto:gli oggetti hanno una semantica di array associativa (cioè può esserci solo un campo di un dato nome), mentre gli elenchi/array no:
// 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" } ] }
Tieni presente che MongoDB è un database di oggetti, non un archivio chiave/valore.