Ако приемем, че имате инсталирана най-новата версия на 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
записи.