Przeprowadź iterację po całej kolekcji i znajdź całą liczbę pól, które się tam znajdują
Teraz możesz użyć operatora agregacji $objectToArray (SERVER-23310), aby zamienić klucze w wartości i je policzyć. Ten operator jest dostępny w MongoDB v3.4.4+
Na przykład:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Pierwszy etap $project
jest zamiana wszystkich kluczy w tablicę do zliczania pól. Drugi etap $group
polega na zsumowaniu liczby kluczy/pól w kolekcji, a także liczby przetworzonych dokumentów. Trzeci etap $project
odejmuje całkowitą liczbę pól od całkowitej liczby dokumentów (ponieważ nie chcesz liczyć dla _id
).
Możesz łatwo dodać $avg, aby liczyć na średnią na ostatnim etapie.