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

MongoDB aggregierte Felder, ohne vorher alle Felder zu kennen

Sie können die folgende Aggregation ausprobieren.

Konvertieren Sie das Objekt in ein Array von Schlüsselwertpaaren, gefolgt von $unwind+$group, um es nach jedem Schlüssel zu gruppieren und die Anzahl zu akkumulieren. Letzter Schritt, um zum benannten Schlüsselwertobjekt zurückzukehren.

db.colname.aggregate([
  {"$addFields":{"metrics":{"$objectToArray":"$metrics"}}},
  {"$unwind":"$metrics"},
  {"$group":{
    "_id":{"id":"$player_id","key":"$metrics.k"},
    "count":{"$sum":"$metrics.v"}
  }},
  {"$group":{
    "_id":"$_id.id",
    "metrics":{"$mergeObjects":{"$arrayToObject":[[["$_id.key","$count"]]]}}
  }}
])