Od verze 2.6 MongoDB zachovává pořadí polí, kde je to možné.
Nicméně _id
pole je vždy na prvním místě, přejmenování polí může vést k přeuspořádání. Obecně bych se však snažil nespoléhat na takové detaily. Jak již zmiňuje původní otázka, je třeba zvážit i další vrstvy, z nichž každá musí poskytovat určitou záruku stability objednávky...
Původní odpověď:
Ne, MongoDB neručí za řazení polí :
Zejména aktualizace na místě, které mění velikost dokumentu, obvykle změní pořadí polí. Pokud například $set
pole, jehož stará hodnota byla typu číslo a nová hodnota je NumberLong
, pole se obvykle přeuspořádají.
Pole však správně zachovávají pořadí:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Vůbec nechápu, proč je to "ošklivý" a "nafoukaný". Ukládání seznamu složitých objektů nemůže být jednodušší. Nicméně zneužívání objektů jako seznamů je rozhodně ošklivé:Objekty mají asociativní sémantiku pole (tj. může existovat pouze jedno pole daného jména), zatímco seznamy/pole nikoli:
// 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" } ] }
Mějte na paměti, že MongoDB je databáze objektů, nikoli úložiště klíč/hodnota.