MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Können MongoDB und seine Treiber die Reihenfolge der Dokumentelemente beibehalten?

Ab Version 2.6 behält MongoDB die Reihenfolge der Felder nach Möglichkeit bei. Die _id Feld steht immer an erster Stelle, eine Umbenennung von Feldern kann zu einer Neuordnung führen. Allerdings würde ich generell versuchen, mich nicht auf solche Details zu verlassen. Wie in der ursprünglichen Frage erwähnt, müssen auch zusätzliche Schichten berücksichtigt werden, die jeweils eine Art Garantie für die Stabilität der Reihenfolge bieten müssen ...

Ursprüngliche Antwort:

Nein, MongoDB übernimmt keine Garantien für die Reihenfolge der Felder :

Insbesondere direkte Aktualisierungen, die die Dokumentgröße ändern, ändern normalerweise die Reihenfolge der Felder. Zum Beispiel, wenn Sie $set ein Feld, dessen alter Wert vom Typ Zahl war und dessen neuer Wert NumberLong ist , Felder werden normalerweise neu geordnet.

Arrays bewahren jedoch die korrekte Reihenfolge:

[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]

Ich verstehe überhaupt nicht, warum das "hässlich" und "aufgebläht" ist. Das Speichern einer Liste komplexer Objekte könnte nicht einfacher sein. Objekte als Listen zu missbrauchen ist jedoch definitiv hässlich:Objekte haben eine assoziative Array-Semantik (d. h. es kann nur ein Feld mit einem gegebenen Namen geben), während Listen/Arrays dies nicht tun:

// 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" } ] }

Denken Sie daran, dass MongoDB eine Objektdatenbank und kein Schlüssel/Wert-Speicher ist.