Förutsatt att du har den senaste versionen av mongodb installerad, är ett sätt att göra det:
Sort
posterna baserat påpublished_date
i fallande ordning.group
posterna baserat på derascategory
. För varje grupp, samla alla poster i en array.- I javascript-/klientsidans kod,
slice
de 5 bästa posterna för varje grupp(kategori).
$slice
är inte tillgänglig på serversidan $project
aggregeringspipeline-operatör, som hindrar oss från att utföra operationen på serversidan.
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
variabel kommer nu att vara en uppsättning dokument. Varje dokument representerar varje category
och har i sin tur en array med topp 5
rekord.