Iterar em toda a coleção e encontrar o número total de campos que existem
Agora você pode utilizar o operador de agregação $objectToArray (SERVER-23310) para transformar chaves em valores e contá-los. Este operador está disponível no MongoDB v3.4.4+
Por exemplo:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Primeiro estágio
$project
é transformar todas as chaves em array para contar campos. Segundo estágio $group
é somar o número de chaves/campos na coleção, também o número de documentos processados. Terceiro estágio $project
está subtraindo o número total de campos com o número total de documentos (Como você não quer contar para _id
). Você pode facilmente adicionar $ avg para contar a média no último estágio.