sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Pueden MongoDB y sus controladores preservar el orden de los elementos del documento?

A partir de la versión 2.6, MongoDB conserva el orden de los campos siempre que sea posible. Sin embargo, el _id El campo siempre viene primero y cambiar el nombre de los campos puede llevar a reordenarlos. Sin embargo, generalmente trato de no confiar en detalles como este. Como menciona la pregunta original, también hay capas adicionales a considerar, cada una de las cuales debe proporcionar algún tipo de garantía para la estabilidad del pedido...

Respuesta original:

No, MongoDB no garantiza el orden de los campos :

En particular, las actualizaciones locales que cambian el tamaño del documento generalmente cambiarán el orden de los campos. Por ejemplo, si $set un campo cuyo valor anterior era de tipo número y el nuevo valor es NumberLong , los campos generalmente se reordenan.

Sin embargo, las matrices conservan el orden correctamente:

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

No veo por qué esto es "feo" e "hinchado" en absoluto. Almacenar una lista de objetos complejos no podría ser más fácil. Sin embargo, abusar de los objetos como listas es definitivamente feo:los objetos tienen una semántica de matriz asociativa (es decir, solo puede haber un campo de un nombre dado), mientras que las listas/matrices no:

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

Tenga en cuenta que MongoDB es una base de datos de objetos, no un almacén de clave/valor.