MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Mongodb :utiliser le nombre d'enregistrements dans l'agrégation après un groupe

Vous pouvez utiliser la requête d'agrégation ci-dessous.

$group initial pour calculer le nombre total pendant que $push le champ concepts dans le champ tableau. $$ROOT pour accéder à l'intégralité de la doc.

Conserver le nombre total d'articles dans le prochain $group .

Reste tout reste comme tu l'as fait.

db.articles.aggregate([
  {"$group":{
    "_id":null,
    "totalArticles":{"$sum":1},
    "concepts":{"$push":"$$ROOT.concepts"}
  }},
  {"$unwind":"$concepts"},
  {"$group":{
    "_id":"$concepts.text",
    "totalArticles":{"$first":"$totalArticles"},
    "count":{"$sum":1},
    "average":{"$avg":"$concepts.relevance"}
  }},
  {"$project":{
      "count": "$count",
      "percent": {
        "$divide": [ "$count", "$totalArticles" ]
      }
    }
  },
  {"$sort": {"count": -1}}
])

$facets est également une option où vous pouvez deux requêtes dans deux pipelines distincts suivis d'une fusion pour continuer avec le reste des étapes.