sql >> Base de Datos >  >> NoSQL >> MongoDB

Agregación Mongo

Suponiendo que tiene instalada la última versión de mongodb, una forma de hacerlo es:

  • Sort los registros basados ​​en la published_date en orden descendente.
  • group los registros en función de su category . Para cada grupo, recopile todos los registros en una matriz.
  • En el código del lado del cliente/javascript, slice los 5 primeros registros de cada grupo (categoría).

El $slice no está disponible en el lado del servidor $project operador de tubería de agregación, que nos impide realizar la operación en el lado del servidor.

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)};
});

El result La variable ahora será una matriz de documentos. Cada documento que representa cada category y a su vez tener una matriz de top 5 registros.