Angenommen, Sie haben die neueste Version von mongodb installiert, können Sie dies folgendermaßen tun:
Sort
die Datensätze basierend auf dempublished_date
in absteigender Reihenfolge.group
die Datensätze basierend auf ihrercategory
. Sammeln Sie für jede Gruppe alle Datensätze zusammen in einem Array.- Im Javascript-/clientseitigen Code
slice
die 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.