Ervan uitgaande dat je de nieuwste versie van mongodb hebt geïnstalleerd, is een manier om dit te doen:
Sort
de records op basis van depublished_date
in aflopende volgorde.group
de records op basis van huncategory
. Verzamel voor elke groep alle records samen in een array.- In de javascript/client-side code,
slice
de 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.