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

¿Ordenación compleja de Mongo?

ACTUALIZACIÓN: Esta respuesta parece estar desactualizada; parece que la clasificación personalizada se puede lograr más o menos usando el $project función de la canalización de agregación para transformar los documentos de entrada antes de clasificarlos. Ver también la respuesta de @Ari.

No creo que esto sea posible directamente; la documentación de clasificación ciertamente no menciona ninguna forma de proporcionar una función de comparación personalizada.

Probablemente sea mejor que haga la ordenación en el cliente, pero si realmente está decidido a hacerlo en el servidor, es posible que pueda usar db.eval() para organizar la ejecución de la ordenación en el servidor (si su cliente lo admite).

Clasificación del lado del servidor:

db.eval(function() { 
  return db.scratch.find().toArray().sort(function(doc1, doc2) { 
    return doc1.a - doc2.a 
  }) 
});

Frente a la ordenación equivalente del lado del cliente:

db.scratch.find().toArray().sort(function(doc1, doc2) { 
  return doc1.a - doc2.b 
});

Tenga en cuenta que también es posible ordenar a través de una canalización de agregación y por $orderby operador (es decir, además de .sort() ), sin embargo, ninguna de estas formas le permite proporcionar una función de clasificación personalizada.