Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

272
Views
¿Cómo se mantiene el orden de las propiedades para ordenar en mongodb?

Según la respuesta a la pregunta , el orden de las propiedades de un objeto no está garantizado. Entonces, ¿cómo funciona perfectamente la función de clasificación en MongoDB cuando pasamos varios campos de clasificación como un objeto?

 db.users.find({}).sort({firstName: 1, age:-1}).exec(callback);

¿Cómo sabe mongodb que primero tiene que ordenar por nombre y luego por edad? ¿Está trabajando en una suposición incorrecta?

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

Esta es una pregunta interesante.

Funciona ya que la mayoría de las implementaciones de ECMAScript realmente conservan el orden de las claves (por ejemplo, V8 que utiliza Node). Sin embargo, el controlador oficial de Node MongoDB no fomenta su uso, sino que ofrece dos notaciones diferentes:

La clasificación se puede lograr con la opción de clasificación de parámetros que toma una variedad de preferencias de clasificación

 { "sort": [['field1','asc'], ['field2','desc']] }

Con un solo campo ascendente, la matriz se puede reemplazar con el nombre del campo.

 { "sort": "name" }

La documentación de Mongoose no menciona nada sobre el orden de las claves (al menos no que yo sepa). Pero también ofrece dos enfoques diferentes para clasificar :

 // sort by "field" ascending and "test" descending query.sort({ field: 'asc', test: -1 }); // equivalent query.sort('field -test');

De hecho, parece que la funcionalidad de clasificación de Mongoose se basó en una suposición incorrecta (pero actualmente válida). Probablemente sea mejor si usa la notación de cadena al ordenar con varias claves. Ordenar con la notación de objetos funciona correctamente cuando se usa MongoDB directamente (por ejemplo, en el shell de MongoDB) ya que no usa JSON puro sino JSON extendido .

También vea esta pregunta muy relacionada: ¿Cómo puede especificar el orden de las propiedades en un objeto javascript para un índice MongoDB en node.js?


También hay un problema de Mongoose sobre esto:

Sí, ese es un dilema desafortunado tanto para la mangosta como para el controlador mongodb. ECMAScript dice que las claves no están ordenadas, pero en realidad están ordenadas en V8 (excepto las teclas numéricas, que es un caso extremo desagradable), y probablemente seguirán ordenándose en V8 en el futuro previsible. Puede usar la sintaxis [['field1', 'asc']] o la sintaxis específica de mongoose 'field1 -field2' o la clase Map ES2015 (que garantiza el orden de inserción de las claves) si le preocupa el orden de las claves.

Entonces, cuando use Mongoose, use la notación de cadena o el soporte recientemente agregado para ES2015 Maps que se garantiza que se ordenarán por orden de inserción.

over 4 years ago · Santiago Trujillo Report

0

En su ejemplo, utiliza índices para operaciones de ordenación en MongoDB y si ordena con varios campos, crea un índice compuesto para admitir la ordenación en varios campos. Como hizo cuando proporcionó índices, el planificador de consultas obtiene el orden de clasificación de sus índices (el orden de su ejemplo: nombre, apellido) y ordenará según su orden. En el otro ejemplo es un objeto javascript. Javascript no garantiza la clasificación.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!