コレクション全体を繰り返し処理し、そこにあるフィールドの総数を見つけます
これで、集計演算子$ objectToArray(SERVER-23310)を使用して、キーを値に変換し、それらをカウントできます。この演算子は、MongoDB v3.4.4 +
で使用できます。例:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
第1段階の$project
すべてのキーを配列に変換してフィールドをカウントすることです。第2段階の$group
コレクション内のキー/フィールドの数と、処理されたドキュメントの数を合計することです。第3段階の$project
は、フィールドの総数からドキュメントの総数を差し引いたものです(_id
をカウントしたくないため) )。
$ avgを簡単に追加して、最終段階の平均を数えることができます。