Начиная с версии 2.6, MongoDB сохраняет порядок полей, где это возможно. Однако, поле _id
всегда стоит первым, а переименование полей может привести к переупорядочению.Однако я обычно стараюсь не полагаться на подобные детали.Как упоминается в первоначальном вопросе, существуют также дополнительные уровни, которые необходимо учитывать, и каждый из них должен предоставить какую-то гарантию стабильности порядка ...
Оригинальный ответ:
Нет, MongoDB не дает гарантий относительно порядка полей :
"Нет никаких гарантий, что порядок полей будет постоянным или таким же после обновления."
В частности, обновления на месте, которые изменяют размер документа, обычно изменяют порядок полей.Например, если вы $set
поле, старое значение которого было типового номера, а новое значение - NumberLong
, поля обычно переупорядочиваются.
Однако массивы сохраняют порядок правильно:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Я не понимаю, почему это "некрасиво" и "раздуто" вообще.Хранение списка сложных объектов не может быть проще.Однако злоупотребление объектами в виде списков определенно уродливо: объекты имеют семантику ассоциативных массивов (т. Е. Может быть только одно поле с заданным именем), а списки / массивы - нет:
// 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" } ] }
Имейте в виду, чтоMongoDB - это объектная база данных, а не хранилище ключей / значений.