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.