MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agrégation Mongo

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 la published_date par ordre décroissant.
  • group les enregistrements en fonction de leur category . 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.