Проблема с разбивкой на страницы в nodejs с понедельником goose и оптимизацией запроса - PullRequest
0 голосов
/ 09 июля 2020

Возникла проблема с запросом к базе данных в понедельник goose Я устанавливаю значение, но не получаю правильного ответа, не знаю почему. Также хочу оптимизировать запрос к базе данных. Я использую mon goose для подсчета количества записей с соответствующими параметрами запроса (разбиение на страницы). Мне нужно сделать отдельный запрос. и поиск фактических записей с model.find({}) должен выполнять отдельный запрос.

Но реальная проблема связана с деталями разбивки на страницы, которые я пытаюсь получить Пример в приведенном ниже коде, если я установил page = 1, page_size = 10, а мой row_count равен 3, тогда я предполагаю получить from 1 и to 1, но вместо этого я получаю from 1 и 11.

Не уверен, что я делаю здесь неправильно.

const pagination = async (model, query, page_number, page_size, order, order_by, next) => {
    const pageS = parseInt(page_number)
    let page = +pageS || 1;
    const limit = parseInt(page_size)
    let per_page = +page_size || 10;

    if (page < 1) {

        page = 1;

    }

    if (per_page < 1) {

        per_page = 1;

    }

    const startIndex = (
      page - 1
    ) * per_page;

    const endIndex = page * page_size
    const key = `${order}`
    const results = {}

    // here reading the data count from database
    const resultCount = await model.countDocuments(query).exec();

    if (endIndex < resultCount) {
        results.next = {
          page: page + 1,
          page_size: limit
        }
      }

    if (startIndex > 0) {
        results.previous = {
          page: page - 1,
          page_size: limit
        }
      }

      try {
      // here trying to search the query with applied pagination
        const data = await model.find(query)
            .limit(per_page)
            .skip(startIndex)
            .sort({ [key] : order_by })
            .exec()

        // here I am passing details  but not getting exact to and from; from is working expected but not to

        // Example if I set page = 1, page_size = 10 and my row_count is 3 then I suppose to get from 1, and to 1 but intead I am getting from 1 and to 11.  
        const pagination_details = {
            data: data,
            meta: {
                page,
                page_size: per_page,
                row_count: parseInt(resultCount, 10),
                page_count: Math.ceil(resultCount / per_page ),
                from:startIndex + 1,
                to: endIndex + 1,
                order: order,
                order_by: order_by
            }
        }
        return pagination_details
        next()
      } catch (e) {
        console.log(e);
        console.error(e);
      }

};

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

1 Ответ

0 голосов
/ 09 июля 2020

Вы забыли разделить начальный и конечный индексы на per_page, чтобы получить номера страниц, попробуйте заменить:

                from:startIndex + 1,
                to: endIndex + 1,

на:

                from: Math.floor(startIndex / per_page) + 1,
                to: Math.ceil(endIndex / per_page) + 1,
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...