En supposant que vous ayez la dernière version de mongodb installée, une façon de procéder est la suivante :
Sort
les enregistrements basés sur lapublished_date
par ordre décroissant.group
les enregistrements en fonction de leurcategory
. Pour chaque groupe, rassemblez tous les enregistrements dans un tableau.- Dans le code javascript/client,
slice
les 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.