Från och med version 2.6 bevarar MongoDB fältordningen där det är möjligt.
Men _id
fältet kommer alltid först ett byte av fält kan leda till ombeställning. Men i allmänhet skulle jag försöka att inte lita på detaljer som denna. Som den ursprungliga frågan nämner finns det också ytterligare lager att ta hänsyn till som var och en måste ge någon slags garanti för orderns stabilitet...
Ursprungligt svar:
Nej, MongoDB ger inga garantier om ordning på fält :
I synnerhet kommer uppdateringar på plats som ändrar dokumentstorleken att ändra ordningen på fälten. Till exempel, om du $set
ett fält vars gamla värde var av typen nummer och det nya värdet är NumberLong
, fält brukar ordnas om.
Men arrayer behåller ordningsföljden korrekt:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Jag förstår inte varför detta är "fult" och "uppsvällt" överhuvudtaget. Att lagra en lista med komplexa objekt kunde inte vara enklare. Men att missbruka objekt som listor är definitivt fult:Objekt har associativ array-semantik (dvs. det kan bara finnas ett fält med ett givet namn), medan listor/arrayer inte 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" } ] }
Tänk på att MongoDB är en objektdatabas, inte ett nyckel-/värdelager.