Según los documentos de Mongo, puede especificar varias claves de clasificación como esta:

{ $sort : { age : -1, posts: 1 } }

Lo que dicen ordenará primero por edad (descendente) y luego por publicaciones (ascendente).

Pero la consulta de clasificación es un objeto Javascript. Que yo sepa, aunque las implementaciones típicamente iteran sobre las propiedades en el orden en que fueron creadas, eso en realidad no es parte de la especificación de ECMAScript: las propiedades de los objetos oficialmente no tienen orden.

¿MongoDB realmente se basa en un comportamiento arbitrario que podría variar según la implementación, estoy equivocado acerca de la especificación ECMAScript o me falta algo en los documentos de Mongo que le permite ajustar la precedencia de otra manera?

1
Semicolon 31 ago. 2014 a las 10:30

2 respuestas

La mejor respuesta

La consola es especial, sus objetos están realmente ordenados a diferencia de EMCAscript normal para que esto pueda suceder.

Aquí hay una pregunta vinculada de un empleado de 10gen que dice: https://stackoverflow.com/a/18514551/383478

Entre otras cosas, el orden de los campos siempre se conserva.

N.B: Es bueno tener en cuenta que V8 (ejecuta MongoDB shell y MR desde v2.2 aproximadamente) ha ordenado objetos en la práctica de todos modos.

La única forma verdadera en JS que no es V8 para mantener el orden es hacer búsquedas clave como: ¿Cómo mantener un objeto / matriz Javascript ordenado mientras se mantienen búsquedas clave?

1
Community 23 may. 2017 a las 12:05

Sí, estás equivocado acerca de la especificación ECMAScript. Las propiedades conservan su orden, por lo que con algunos controladores para idiomas (por ejemplo, Perl ordena "hashes" por nombre de clave de forma predeterminada, use Tie :: IxHash para cambiar eso) recomienda formularios que también mantienen un orden en la estructura a convertir.

En cualquier caso, esto no es "realmente" JavaScript de todos modos, pero es BSON. De todos modos, es un comportamiento prestado, por lo que la afirmación sigue siendo la misma. El orden que especifique se conserva.

1
Neil Lunn 31 ago. 2014 a las 06:44