sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB grupper efter array indre-elementer

Hvilken ramme bruger du? Dette er ikke MongoDB shell og ligner noget mærkeligt indpakning omkring MapReduce. I så fald ville $unwind ikke være tilgængelig, og du har brug for det til brugeren i aggregeringsrammen. Her er, hvad du vil have i mongo-skallen:

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

Så effektivt:

  1. Filtrer efter dato, fordi du allerede har indstillet en variation for de sidste 7 dage
  2. Projicér kun det eller de felter, vi har brug for { Vi behøver kun én! }
  3. Slap arrayet af, så vi nu har en rekord for hvert array-element i hvert dokument
  4. Grupper på kunstneren fra de udvidede dokumenter
  5. Projekter i et dokumentformat, du kan bruge som gruppe, der rodes rundt med _id
  6. Sortér resultaterne i omvendt rækkefølge for at se toppen tagget først

Og det fantastiske ved aggregering er, at du gradvist kan opbygge disse stadier for at se, hvad der foregår.

Ryst og bag ind i din egen driverimplementering eller ODM-ramme efter behov.




  1. Hvordan genbruger man redis-forbindelse i socket.io?

  2. Få en bestemt del af dokumentet

  3. Hvorfor bruger MongoDB ikke indekskryds?

  4. Fuld tekst søgemuligheder for MongoDB opsætning