Fra og med version 2.6 bevarer MongoDB rækkefølgen af felter, hvor det er muligt.
Men _id
felt kommer altid først, et omdøbning af felter kan føre til ombestilling. Jeg vil dog generelt prøve ikke at stole på detaljer som denne. Som det oprindelige spørgsmål nævner, er der også yderligere lag at overveje, som hver skal give en form for garanti for stabiliteten af ordren...
Originalt svar:
Nej, MongoDB giver ikke garantier for rækkefølgen af felter :
Især vil opdateringer på stedet, der ændrer dokumentstørrelsen, normalt ændre rækkefølgen af felter. For eksempel, hvis du $set
et felt, hvis gamle værdi var af typen nummer, og den nye værdi er NumberLong
, felter bliver normalt omarrangeret.
Arrays bevarer dog rækkefølgen korrekt:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Jeg kan ikke se, hvorfor dette overhovedet er "grimt" og "oppustet". Det kunne ikke være nemmere at gemme en liste over komplekse objekter. Men at misbruge objekter som lister er bestemt grimt:Objekter har associativ array-semantik (dvs. der kan kun være ét felt med et givet navn), mens lister/arrays ikke gør det:
// 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" } ] }
Husk, at MongoDB er en objektdatabase, ikke et nøgle-/værdilager.