Спасибо за советы!
Я пока нуб и без понятия, что такое профайлинг, как логгировать запросы и их интерпритировать. И на данном этапе в таком сложно разобраться.
Пока же решил проблему изменив запрос к базе, убрал сравнение массивов. Производительность значительно подросла.
function sendFilesByQuery(chatId, query) {
User.findOne({ telegramId: chatId }).then((user) => {
// фильтры на основе которых формируется запрос
if (user.filter.time === 1) {
time = { $gte: 2000 };
}
if (user.filter.time === 2) {
time = { $gte: 2015 };
}
if (user.filter.pop === 1) {
pop = { $lt: 71 };
}
if (user.filter.pop === 2) {
pop = { $gt: 9 };
}
if (user.filter.time === 0) {
delete query.year;
}
if (user.filter1.pop === 0) {
delete query.viewed;
}
query = {
type: query.type.toString(),
viewed: pop,
year: time,
//Здесь отсеиваются просмотренные файлы
_id: {
$nin: watched,
},
};
File.find(query).then((file) => {
rndfile = file[Math.floor(Math.random() * file.length)];
let allfiles;
let userfiles;
switch (query.type) {
case "1":
userfiles = user.files1;
allfiles = user.allfiles;
break;
}
bot.sendDocument(chatId, rndfile.gif);
if (!rndfile) {
bot.sendMessage(chatId, "text");
}
if (userfiles1.length >= allfiles.length - 1) {
clearfilesType(user.telegramId, query);
}
});
});
}