Ако приемем, че имате инсталирана най-новата версия на mongodb, един от начините да го направите е:
Sortзаписите въз основа наpublished_dateв низходящ ред.groupзаписите въз основа на тяхнатаcategory. За всяка група съберете всички записи заедно в масив.- В кода от страна на javascript/клиента,
sliceпървите 5 записа от всяка група (категория).
$slice не е наличен в $project от страната на сървъра оператор на тръбопровод за агрегиране, който ни пречи да извършим операцията от страната на сървъра.
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 променливата вече ще бъде масив от документи. Всеки документ, представляващ всяка category и на свой ред да има масив от горните 5 записи.