sql >> Database teknologi >  >> NoSQL >> MongoDB

Kan MongoDB og dets drivere bevare rækkefølgen af ​​dokumentelementer

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.



  1. Hvordan søger man efter brugere efter både for- og efternavn med MongoDB?

  2. Tester mongocxx c++ driver med en prøvekode

  3. Hvordan øger jeg en talværdi i Mongoose?

  4. Opdater rollebruger:ikke autoriseret på admin til at udføre kommando