MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Agregação do Mongo


Supondo que você tenha a versão mais recente do mongodb instalada, uma maneira de fazer isso é:
  • Sort os registros com base na published_date em ordem decrescente.
  • group os registros com base em sua category . Para cada grupo, colete todos os registros em uma matriz.
  • No código do lado javascript/cliente, slice os 5 melhores registros, de cada grupo (categoria).

O $slice não está disponível no lado do servidor $project operador de pipeline de agregação, que nos impede de realizar a operação no lado do 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)};
});

O result variável agora será uma matriz de documentos. Cada documento representando cada category e, por sua vez, ter uma matriz dos principais 5 registros.