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

Mongodb:use a contagem de registros na agregação após um grupo


Você pode usar a consulta de agregação abaixo.

$group inicial para calcular a contagem total enquanto $push o campo de conceitos em campo de matriz. $$ROOT para acessar todo o documento.

Reter a contagem total de artigos no próximo $group .

Resto tudo fica do jeito que você fez.
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 também é uma opção em que você pode fazer duas consultas em dois pipelines separados seguidos de mesclagem para continuar com o restante dos estágios.