Vanaf versie 2.6 behoudt MongoDB de volgorde van velden waar mogelijk.
Echter, de _id
veld komt altijd op de eerste plaats een hernoemen van velden kan leiden tot herordening. Ik zou echter over het algemeen proberen niet op dit soort details te vertrouwen. Zoals de oorspronkelijke vraag vermeldt, zijn er ook extra lagen om te overwegen, die elk een soort garantie moeten bieden voor de stabiliteit van de bestelling...
Oorspronkelijk antwoord:
Nee, MongoDB geeft geen garanties over de volgorde van velden :
Met name interne updates die de documentgrootte wijzigen, zullen meestal de volgorde van velden veranderen. Als u bijvoorbeeld $set
een veld waarvan de oude waarde van het type number was en de nieuwe waarde is NumberLong
, worden velden meestal opnieuw geordend.
Arrays behouden echter de juiste volgorde:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Ik zie niet in waarom dit "lelijk" en "opgeblazen" is. Het opslaan van een lijst met complexe objecten kan niet eenvoudiger. Objecten misbruiken als lijsten is echter absoluut lelijk:objecten hebben associatieve array-semantiek (d.w.z. er kan maar één veld van een bepaalde naam zijn), terwijl lijsten/arrays dat niet doen:
// 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" } ] }
Houd er rekening mee dat MongoDB een objectdatabase is, geen sleutel/waarde-archief.