Gentag over hele samlingen, og find hele antallet af felter, der er
Nu kan du bruge aggregeringsoperatoren $objectToArray (SERVER-23310) til at omdanne nøgler til værdier og tælle dem. Denne operatør er tilgængelig i MongoDB v3.4.4+
For eksempel:
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ørste fase $project
er at omdanne alle nøgler til array for at tælle felter. Andet trin $group
er at summere antallet af nøgler/felter i samlingen, også antallet af behandlede dokumenter. Tredje fase $project
trækker det samlede antal felter fra med det samlede antal dokumenter (da du ikke vil tælle for _id
).
Du kan nemt tilføje $avg for at tælle for gennemsnittet på den sidste fase.