Suponiendo que tiene instalada la última versión de mongodb, una forma de hacerlo es:
Sortlos registros basados en lapublished_dateen orden descendente.grouplos registros en función de sucategory. Para cada grupo, recopile todos los registros en una matriz.- En el código del lado del cliente/javascript,
slicelos 5 primeros registros de cada grupo (categoría).
El $slice no está disponible en el lado del servidor $project operador de tubería de agregación, que nos impide realizar la operación en el lado del servidor.
var result = db.collection.aggregate(
[
{$sort:{"published_date":-1}},
{$group:{"_id":"$category","values":{$push:"$$ROOT"}}}
]
).map(function(doc){
return {"category":doc._id,"records":doc.values.slice(0,5)};
});
El result La variable ahora será una matriz de documentos. Cada documento que representa cada category y a su vez tener una matriz de top 5 registros.