Supondo que você tenha a versão mais recente do mongodb instalada, uma maneira de fazer isso é:
Sortos registros com base napublished_dateem ordem decrescente.groupos registros com base em suacategory. Para cada grupo, colete todos os registros em uma matriz.- No código do lado javascript/cliente,
sliceos 5 melhores registros, de cada grupo (categoria).
O
$slice não está disponível no lado do servidor $project operador de pipeline de agregação, que nos impede de realizar a operação no lado do 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)};
});
O
result variável agora será uma matriz de documentos. Cada documento representando cada category e, por sua vez, ter uma matriz dos principais 5 registros.