@DeFaNJI

Можно ли ускорить функцию составления топа?

Я создал функцию, которая сортирует юзеров по уменьшению значения в поле, а также ищет позицию человека в топе.

const getTop = async (name, userId) => {
    const top = await Users.find({ admin: false }, { [name]: 1, id: 1 }).sort({
        [`${name}`]: -1,
    });

    let userPosition = 0;

    for (let i = 0; i < top.length; i++) {
        const { id } = top[i];

        if (id === userId) {
            userPosition = i;
            break;
        }
    }

    const topUsers = top.slice(0, 10);

    return [topUsers, userPosition + 1];
}


Возможно ли изменить ее, что бы она работала быстрее? Мне кажется, что при большом кол-ве человек топ будет составляться большое кол-во времени.

Сразу говорю, что искал в интернете, как узнать номер документа при сортировке, но не нашел никакой информации по этому поводу
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
@kapp1
Постараюсь быть менее токсичным и не писать про 10+ лет опыта)

Тебе надо почитать статьи ну или ролики про high performance в монго или optimize query performance.

Если коротко, то не раздувай коллекцию лишними данными и делай индексы.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@alekcena
Нелинейный наставник
По поводу оптимизации.
сортирует юзеров по уменьшению значения в поле, а также

Я бы подумал по поводу разделения кода, а не скорости.
Сейчас вы думаете, а как же оптимизировать. Да не как. Вы не настолько разбираетесь в языке что-бы это делать.

Когда у вас реально будет "Влиять на скорость". Тогда и начнёте думать.

Сразу говорю, что искал в интернете, как узнать номер документа при сортировке, но не нашел никакой информации по этому поводу

Вот эта информация вообще к чему.
Какой документ, какая сортировка?
Ответ написан
@sasmoney
ограничить количество и разделять на отдельные страницы с получением 1001 строки, 2001 и тд
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы