What would be the better way to select count of users
Will the JavaScript filtering code work fine if the number of users increases?
Using multiple mongodb requests
const db = fastify.mongo.db; const users_collection = await db.collection('users'); let users = { registered: { count: null, typed_count: { vk: null, ok: null, google: null, oneclick: null, }, }, }; users.registered.count = await users_collection.countDocuments(); users.registered.typed_count.vk = await users_collection.countDocuments({ 'social.vk': { $exists: true } }); users.registered.typed_count.ok = await users_collection.countDocuments({ 'social.ok': { $exists: true } }); users.registered.typed_count.google = await users_collection.countDocuments({ 'social.google': { $exists: true } }); users.registered.typed_count.oneclick = await users_collection.countDocuments({ social: { $exists: false } });Using one mongodb request and javascript filtering
const db = fastify.mongo.db; const users_collection = await db.collection('users'); let users = { registered: { count: null, typed_count: { vk: null, ok: null, google: null, oneclick: null, }, }, }; const data = await (await users_collection.find()).toArray(); users.registered.count = data.length; users.registered.typed_count.vk = data.filter((obj) => obj.social && obj.social.vk).length; users.registered.typed_count.ok = data.filter((obj) => obj.social && obj.social.ok).length; users.registered.typed_count.google = data.filter((obj) => obj.social && obj.social.google).length; users.registered.typed_count.oneclick = data.filter((obj) => !obj.social).length;