Первый метод займет больше времени, поскольку задействовано слишком много network requests
и
Второй метод займет слишком много вашего server's memory (RAM)
, так как все документы сначала будут помещены в память.
Таким образом, мы можем сократить как время, так и память, используя MongoDB aggregation's
$group
конвейер, который будет выглядеть примерно так
db.collection.aggregate([
{
$group: {
_id: null,
vk: {
$sum: {
$cond: [{ $gt: ["$social.vk", null]}, 1, 0]
}
},
ok: {
$sum: {
$cond: [{ $gt: ["$social.ok", null]}, 1, 0]
}
},
google: {
$sum: {
$cond: [{ $gt: ["$social.google", null]}, 1, 0]
}
},
oneclick: {
$sum: {
$cond: [{ $lte: ["$social", null]}, 1, 0]
}
},
}
}
])
Рабочий пример