Supponendo che tu abbia installato l'ultima versione di mongodb, un modo per farlo è:
Sort
i record in base allapublished_date
in ordine decrescente.group
i record in base alla lorocategory
. Per ogni gruppo, raccogli tutti i record in un array.- Nel codice lato client/javascript,
slice
i primi 5 record, di ogni gruppo(categoria).
La $slice
non è disponibile nel lato server $project
operatore della pipeline di aggregazione, che ci impedisce di eseguire l'operazione sul lato server.
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)};
});
Il result
la variabile sarà ora un array di documenti. Ogni documento che rappresenta ogni category
e a sua volta avere un array di 5
superiori record.