En supposant que vous ayez la dernière version de mongodb installée, une façon de procéder est la suivante :
Sortles enregistrements basés sur lapublished_datepar ordre décroissant.grouples enregistrements en fonction de leurcategory. Pour chaque groupe, rassemblez tous les enregistrements dans un tableau.- Dans le code javascript/client,
sliceles 5 meilleurs enregistrements, de chaque groupe (catégorie).
Le $slice n'est pas disponible côté serveur $project opérateur de pipeline d'agrégation, qui nous empêche d'effectuer l'opération côté serveur.
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)};
});
Le result sera désormais un tableau de documents. Chaque document représentant chaque category et à son tour ayant un tableau des meilleurs 5 enregistrements.