Od wersji 2.6 MongoDB zachowuje kolejność pól tam, gdzie to możliwe.
Jednak _id
pole zawsze jest na pierwszym miejscu, a zmiana nazw pól może prowadzić do zmiany kolejności. Jednak generalnie starałbym się nie polegać na takich szczegółach. Jak wspomniano w pierwotnym pytaniu, istnieją również dodatkowe warstwy do rozważenia, z których każda musi dawać jakąś gwarancję stabilności porządku...
Oryginalna odpowiedź:
Nie, MongoDB nie gwarantuje kolejności pól :
W szczególności aktualizacje w miejscu, które zmieniają rozmiar dokumentu, zwykle zmieniają kolejność pól. Na przykład, jeśli $set
pole, którego stara wartość była typu number, a nowa wartość to NumberLong
, pola są zwykle zmieniane.
Jednak tablice zachowują kolejność poprawnie:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Nie rozumiem, dlaczego to w ogóle jest „brzydkie” i „rozdęte”. Przechowywanie listy złożonych obiektów nie może być prostsze. Jednak nadużywanie obiektów jako list jest zdecydowanie brzydkie:obiekty mają semantykę tablic asocjacyjnych (tj. może istnieć tylko jedno pole o podanej nazwie), podczas gdy listy/tablice nie:
// 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" } ] }
Pamiętaj, że MongoDB to obiektowa baza danych, a nie magazyn kluczy/wartości.