Supondo que você tenha a versão mais recente do mongodb instalada, uma maneira de fazer isso é:
Sort
os registros com base napublished_date
em ordem decrescente.group
os registros com base em suacategory
. Para cada grupo, colete todos os registros em uma matriz.- No código do lado javascript/cliente,
slice
os 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.