Angenommen, Sie haben die neueste Version von mongodb installiert, können Sie dies folgendermaßen tun:
Sortdie Datensätze basierend auf dempublished_datein absteigender Reihenfolge.groupdie Datensätze basierend auf ihrercategory. Sammeln Sie für jede Gruppe alle Datensätze zusammen in einem Array.- Im Javascript-/clientseitigen Code
slicedie Top 5 Datensätze jeder Gruppe (Kategorie).
Das $slice ist im serverseitigen $project nicht verfügbar Aggregation-Pipeline-Operator, der uns davon abhält, die Operation auf der Serverseite durchzuführen.
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)};
});
Das result Variable ist jetzt ein Array von Dokumenten. Jedes Dokument, das jede category repräsentiert und wiederum mit einem Array von Top 5 Aufzeichnungen.