sql >> Database >  >> NoSQL >> MongoDB

MongoDB groeperen op array inner-elementen

Welk kader gebruik je? Dit is geen MongoDB-shell en ziet eruit als een rare wrapper rond MapReduce. In dat geval zou $unwind niet beschikbaar zijn en heb je het nodig voor de gebruiker in het aggregatieraamwerk. Dit is wat je wilt in de mongo-schaal:

db.articles.aggregate([
  {$match: { class_date: { $gte: date } } },
  {$project: { _id: 0, class_artist: 1 } },
  {$unwind: "$class_artist" },
  {$group: { _id: "$class_artist", tags: { $sum: 1 } }},
  {$project: { _id: 0,class_artist: "$_id", tags: 1 } },
  {$sort: { tags: -1 } }
])

Zo efficiënt:

  1. Filter op datum omdat je al een var hebt ingesteld voor de afgelopen 7 dagen
  2. Projecteer alleen de velden die we nodig hebben { We hebben er maar één nodig! }
  3. Ontwikkel de array zodat we nu een record hebben voor elk array-element in elk document
  4. Groep over de artiest uit de uitgevouwen documenten
  5. Projecteer in een documentformaat dat je als groep kunt gebruiken om met _id te rommelen
  6. Sorteer de resultaten in omgekeerde volgorde om de top als eerste getagd te zien

En het mooie van aggregatie is dat je die fasen geleidelijk kunt opbouwen om te zien wat er aan de hand is.

Schud en bak indien nodig in uw eigen driverimplementatie of ODM-framework.




  1. Hoe MongoDB opvragen met like

  2. MongoDB $isoWeek

  3. Kan geen verbinding maken met mongodb errno:61 Verbinding geweigerd

  4. MongoDB findOneAndUpdate()