Zakładając, że masz zainstalowaną najnowszą wersję mongodb, jednym ze sposobów na zrobienie tego jest:
Sortrekordy na podstawiepublished_datew porządku malejącym.grouprekordy na podstawie ichcategory. Dla każdej grupy zbierz wszystkie rekordy razem w tablicy.- W kodzie javascript/po stronie klienta
slice5 najlepszych rekordów z każdej grupy (kategorii).
$slice nie jest dostępny po stronie serwera $project operator potoku agregacji, który uniemożliwia nam wykonanie operacji po stronie serwera.
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)};
});
result zmienna będzie teraz tablicą dokumentów. Każdy dokument reprezentujący każdą category i z kolei mając tablicę najlepszych 5 rekordy.