MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongodb:Verwenden Sie die Datensatzanzahl in der Aggregation nach einer Gruppe

Sie können die folgende Aggregationsabfrage verwenden.

Anfängliche $group um die Gesamtzahl zu berechnen, während $push das Concepts-Feld in ein Array-Feld. $$ROOT um auf das gesamte Dokument zuzugreifen.

Behalten Sie die Gesamtzahl der Artikel in der nächsten $group bei .

Alles bleibt so, wie du es getan hast.

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 ist auch eine Option, bei der Sie zwei Abfragen in zwei separaten Pipelines ausführen können, gefolgt von einer Zusammenführung, um mit den restlichen Phasen fortzufahren.