Iterera över hela samlingen och hitta hela antalet fält som finns
Nu kan du använda aggregeringsoperatorn $objectToArray (SERVER-23310) för att omvandla nycklar till värden och räkna dem. Denna operatör är tillgänglig i MongoDB v3.4.4+
Till exempel:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Första steget $project
är att förvandla alla nycklar till array för att räkna fält. Andra steget $group
är att summera antalet nycklar/fält i samlingen, även antalet behandlade dokument. Tredje steget $project
subtraherar det totala antalet fält med det totala antalet dokument (eftersom du inte vill räkna för _id
).
Du kan enkelt lägga till $avg för att räkna för genomsnittet på det sista steget.