MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggregazione Mongo

Supponendo che tu abbia installato l'ultima versione di mongodb, un modo per farlo è:

  • Sort i record in base alla published_date in ordine decrescente.
  • group i record in base alla loro category . 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.