Suponiendo que tiene instalada la última versión de mongodb, una forma de hacerlo es:
Sort
los registros basados en lapublished_date
en orden descendente.group
los 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,
slice
los 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.