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

Campos agregados do MongoDB sem conhecer todos os campos de antemão


Você pode tentar a agregação abaixo.

Converta o objeto em uma matriz de pares de valores-chave seguidos por $unwind+$group para agrupar por cada chave e acumular a contagem. Etapa final para voltar ao objeto de valor-chave nomeado.
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"]]]}}
  }}
])