Herhaal de hele verzameling en vind het volledige aantal velden dat er is
Nu kunt u de aggregatie-operator $objectToArray (SERVER-23310) gebruiken om sleutels om te zetten in waarden en ze te tellen. Deze operator is beschikbaar in MongoDB v3.4.4+
Bijvoorbeeld:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Eerste fase $project
is om alle sleutels in een array te veranderen om velden te tellen. Tweede fase $group
is om het aantal sleutels/velden in de verzameling op te tellen, ook het aantal verwerkte documenten. Derde fase $project
trekt het totale aantal velden af van het totale aantal documenten (omdat u niet wilt tellen voor _id
).
U kunt eenvoudig $ avg toevoegen om voor het gemiddelde te tellen in de laatste fase.