sql >> Database >  >> NoSQL >> MongoDB

Mongo-aggregatie

Ervan uitgaande dat je de nieuwste versie van mongodb hebt geïnstalleerd, is een manier om dit te doen:

  • Sort de records op basis van de published_date in aflopende volgorde.
  • group de records op basis van hun category . Verzamel voor elke groep alle records samen in een array.
  • In de javascript/client-side code, slice de top 5 records van elke groep(categorie).

De $slice is niet beschikbaar aan de serverzijde $project aggregatiepijplijnoperator, die ons ervan weerhoudt de bewerking aan de serverzijde uit te voeren.

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

Het result variabele zal nu een array van documenten zijn. Elk document vertegenwoordigt elke category en op zijn beurt een reeks van top 5 . hebben records.



  1. Gegevens ophalen uit verzameling b niet in verzameling a in een MongoDB-shellquery

  2. Mongo-query converteren naar Laravel, geneste elemMatch

  3. `velden kunnen niet identiek zijn:' ' en ' '' mongoimport-fout

  4. Jade gebruiken om JSON te herhalen