Supponendo che tu abbia installato l'ultima versione di mongodb, un modo per farlo è:
Sorti record in base allapublished_datein ordine decrescente.groupi record in base alla lorocategory. Per ogni gruppo, raccogli tutti i record in un array.- Nel codice lato client/javascript,
slicei primi 5 record, di ogni gruppo(categoria).
La $slice non è disponibile nel lato server $project operatore della pipeline di aggregazione, che ci impedisce di eseguire l'operazione sul lato server.
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)};
});
Il result la variabile sarà ora un array di documenti. Ogni documento che rappresenta ogni category e a sua volta avere un array di 5 superiori record.