Iterujte přes celou kolekci a najděte celý počet polí, která existují
Nyní můžete použít agregační operátor $objectToArray (SERVER-23310) k přeměně klíčů na hodnoty a jejich počítání. Tento operátor je dostupný v MongoDB v3.4.4+
Například:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
První fáze $project
je přeměnit všechny klíče na pole pro počítání polí. Druhá fáze $group
je sečíst počet klíčů/polí ve sbírce, také počet zpracovaných dokumentů. Třetí fáze $project
odečítá celkový počet polí od celkového počtu dokumentů (protože nechcete počítat pro _id
).
Můžete snadno přidat $ avg pro započítání do průměru v poslední fázi.