Depuis la version 2.6, MongoDB préserve l'ordre des champs dans la mesure du possible.
Cependant, le _id
champ vient toujours en premier un renommage des champs peut conduire à une réorganisation. Cependant, j'essaierais généralement de ne pas me fier à des détails comme celui-ci. Comme le mentionne la question d'origine, il existe également des couches supplémentaires à prendre en compte, chacune devant fournir une sorte de garantie pour la stabilité de la commande...
Réponse originale :
Non, MongoDB ne garantit pas l'ordre des champs :
En particulier, les mises à jour sur place qui modifient la taille du document modifient généralement l'ordre des champs. Par exemple, si vous $set
un champ dont l'ancienne valeur était de type nombre et la nouvelle valeur est NumberLong
, les champs sont généralement réorganisés.
Cependant, les tableaux conservent correctement l'ordre :
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Je ne vois pas du tout pourquoi c'est "laid" et "gonflé". Stocker une liste d'objets complexes ne pourrait pas être plus facile. Cependant, abuser des objets en tant que listes est vraiment moche :les objets ont une sémantique de tableau associatif (c'est-à-dire qu'il ne peut y avoir qu'un seul champ d'un nom donné), contrairement aux listes/tableaux :
// 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" } ] }
Gardez à l'esprit que MongoDB est une base de données d'objets, pas un magasin clé/valeur.