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

Champs agrégés MongoDB sans connaître tous les champs à l'avance

Vous pouvez essayer l'agrégation ci-dessous.

Convertissez l'objet en tableau de paires clé-valeur suivi de $unwind+$group pour grouper par chaque clé et accumuler le nombre. Dernière étape pour revenir à l'objet de valeur clé nommé.

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