Lặp lại toàn bộ tập hợp và tìm toàn bộ số trường có
Giờ đây, bạn có thể sử dụng toán tử tổng hợp $ objectToArray (SERVER-23310) để biến các khóa thành giá trị và đếm chúng. Toán tử này có sẵn trong MongoDB v3.4.4 +
Ví dụ:
db.collection.aggregate([
{"$project":{"numFields":{"$size":{"$objectToArray":"$$ROOT"}}}},
{"$group":{"_id":null, "fields":{"$sum":"$numFields"}, "docs":{"$sum":1}}},
{"$project":{"total":{"$subtract":["$fields", "$docs"]}, _id:0}}
])
Giai đoạn đầu tiên $project
là biến tất cả các khóa thành mảng để đếm trường. Giai đoạn thứ hai $group
là tổng số khóa / trường trong bộ sưu tập, cũng là số tài liệu được xử lý. Giai đoạn thứ ba $project
đang trừ tổng số trường với tổng số tài liệu (Vì bạn không muốn tính cho _id
).
Bạn có thể dễ dàng thêm $ avg để tính trung bình trong giai đoạn cuối cùng.