A partir da versão 2.6, o MongoDB preserva a ordem dos campos sempre que possível. No entanto, o
_id
campo sempre vem primeiro e renomear campos pode levar à reordenação. No entanto, eu geralmente tento não confiar em detalhes como este. Como a pergunta original menciona, também existem camadas adicionais a serem consideradas, cada uma delas deve fornecer algum tipo de garantia para a estabilidade do pedido ... Resposta Original:
Não, o MongoDB não garante a ordem dos campos :
Em particular, as atualizações in-loco que alteram o tamanho do documento geralmente alteram a ordem dos campos. Por exemplo, se você
$set
um campo cujo valor antigo era do tipo número e o novo valor é NumberLong
, os campos geralmente são reordenados. No entanto, os arrays preservam a ordem corretamente:
[ {'key1' : 'value1'}, {'key2' : 'value2'}, ... ]
Não vejo por que isso é "feio" e "inchado". Armazenar uma lista de objetos complexos não poderia ser mais fácil. No entanto, abusar de objetos como listas é definitivamente feio:Objetos têm semântica de matriz associativa (ou seja, pode haver apenas um campo de um determinado nome), enquanto listas/matrizes não:
// 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" } ] }
Tenha em mente que o MongoDB é um banco de dados de objetos, não um armazenamento de chave/valor.