Itérer sur toute la collection et trouver le nombre total de champs qu'il y a
Vous pouvez désormais utiliser l'opérateur d'agrégation $objectToArray (SERVER-23310) pour transformer les clés en valeurs et les compter. Cet opérateur est disponible dans MongoDB v3.4.4+
Par exemple :
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Première étape $project
est de transformer toutes les clés en tableau pour compter les champs. Deuxième étape $group
consiste à additionner le nombre de clés/champs de la collection, ainsi que le nombre de documents traités. Troisième étape $project
soustrait le nombre total de champs avec le nombre total de documents (Comme vous ne voulez pas compter pour _id
).
Vous pouvez facilement ajouter $avg pour compter pour la moyenne lors de la dernière étape.