Возникла проблема с запросом к базе данных в понедельник 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);
}
};
Может ли кто-нибудь помочь мне получить правильные данные, в чем я здесь ошибаюсь. Может быть какая-то логическая ошибка