Ulangi seluruh koleksi, dan temukan seluruh jumlah bidang yang ada
Sekarang Anda dapat menggunakan operator agregasi $objectToArray (SERVER-23310) untuk mengubah kunci menjadi nilai dan menghitungnya. Operator ini tersedia di MongoDB v3.4.4+
Misalnya:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Tahap pertama $project
adalah mengubah semua kunci menjadi larik untuk menghitung bidang. Tahap kedua $group
adalah menjumlahkan jumlah kunci/bidang dalam koleksi, juga jumlah dokumen yang diproses. Tahap ketiga $project
adalah mengurangi jumlah total bidang dengan jumlah total dokumen (Karena Anda tidak ingin menghitung _id
).
Anda dapat dengan mudah menambahkan $avg untuk menghitung rata-rata pada tahap terakhir.