MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O MongoDB e seus drivers podem preservar a ordenação dos elementos do documento


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.