Za předpokladu, že máte nainstalovanou nejnovější verzi mongodb, jeden způsob, jak to udělat, je:
Sort
záznamy založené napublished_date
v sestupném pořadí.group
záznamy na základě jejichcategory
. Pro každou skupinu shromážděte všechny záznamy do pole.- V kódu na straně javascriptu/klienta
slice
prvních 5 záznamů z každé skupiny (kategorie).
$slice
není k dispozici na straně serveru $project
operátor agregačního kanálu, který nám brání v provádění operace na straně serveru.
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
proměnná bude nyní pole dokumentů. Každý dokument představující každou category
a na oplátku mít pole top 5
záznamy.