Ervan uitgaande dat je de nieuwste versie van mongodb hebt geïnstalleerd, is een manier om dit te doen:
Sortde records op basis van depublished_datein aflopende volgorde.groupde records op basis van huncategory. Verzamel voor elke groep alle records samen in een array.- In de javascript/client-side code,
slicede top 5 records van elke groep(categorie).
De $slice is niet beschikbaar aan de serverzijde $project aggregatiepijplijnoperator, die ons ervan weerhoudt de bewerking aan de serverzijde uit te voeren.
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)};
});
Het result variabele zal nu een array van documenten zijn. Elk document vertegenwoordigt elke category en op zijn beurt een reeks van top 5 . hebben records.