sql >> Databasteknik >  >> NoSQL >> MongoDB

Kan MongoDB och dess drivrutiner bevara ordningen av dokumentelement

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.



  1. Kunde inte ansluta till Redis på 127.0.0.1:6379:Anslutning nekades med hembryggning

  2. MongoDB BSON-codec används inte vid kodning av objekt

  3. Vad gör jag för fel när jag manipulerar data i Meteor/MongoDB?

  4. Hur man ställer in mongod.conf bind_ip med flera ip-adresser