ACTUALIZACIÓN: Esta respuesta parece estar desactualizada; parece que la clasificación personalizada se puede lograr más o menos utilizando el $project
function of the aggregation pipeline para transformar los documentos de entrada antes de la clasificación. Ver también la respuesta de @Ari.
No creo que esto sea posible directamente; el sort documentation ciertamente no menciona ninguna forma de proporcionar una función de comparación personalizada.
Probablemente sea mejor que haga la clasificación en el cliente, pero si realmente está decidido a hacerlo en el servidor, puede usar db.eval()
para organizar la ejecución en el servidor (si su cliente lo admite).
del lado del servidor para ordenar:
db.eval(function() {
return db.scratch.find().toArray().sort(function(doc1, doc2) {
return doc1.a - doc2.a
})
});
Versus el equivalente tipo de 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 un aggregation pipeline y por el $orderby
operator (es decir, además .sort()
) sin embargo, ninguna de estas formas le permite proporcionar una función de clasificación personalizada.
Estoy corriendo con el mismo problema. ¿Pudo encontrar una manera de lograr esto en el lado del servidor? Preferiría no tener que hacer esto en el cliente, o agregar el campo adicional. –