Mon goose paginate - один документ всегда теряется - PullRequest
0 голосов
/ 12 января 2020

У меня есть БД с 6 документами, и вот мой маршрут:

router.get('', async (req, res) => {
const search = req.query.search !=null ? req.query.search : "";
const page = req.query.page !=null ? req.query.page : 1;
const limit = req.query.limit !=null ? req.query.limit : 4;
try {
    User.paginate({fullname: {$regex: search, $options: '-i'}}, {page: page, limit: limit, customLabels: myCustomLabels, select:'-email -password'}, async (err, result) => {
            res.json(result)
    }
    );
}
catch(e){
    res.status(500).json({ message: 'somthing went wrong, try again...  ERROR :' + e });
}

})

В первом ответе (1 страница, 4 элемента) я вижу, что общее количество документов составляет 6, но когда я отправил второй запрос (для 2-ой страницы), он говорит, что общее количество douments составляет 5, и послал только один документ в массиве. Если я изменю количество элементов на странице на 5 - второй запрос также отправит пустой массив. Я не понимаю, почему один документ всегда теряется

UPD: он работает правильно, когда я удаляю {полное имя: {$ regex: search, $ options: '-i'}}

I понятия не имею, почему это потеряно с опцией регулярных выражений. Спасибо!

1 Ответ

0 голосов
/ 18 января 2020

Прежде всего, лучше упомянуть, используете ли вы библиотеку или просто добавляете часть кода require / import в пример кода, потому что Model.paginate() не существует в mon goose.

Вы также смешиваете async / await с традиционным синтаксисом обратного вызова. Вы могли бы сделать свой код намного чище и проще.

Я думаю, что один из ваших документов может не иметь поля полного имени. вот почему он не появляется, когда вы делаете поиск. В любом случае, попробуйте код:

router.get('', async (req, res) => {
  const { search = "", page = 1, limit = 4 } = req.query;
  const paginate = {};
  if (search) {
    paginate.fullname = {
      $regex: search, 
      $options: '-i'
    }
  };
  try {
    const result = await User.paginate(paginate, {
      page, 
      limit, 
      customLabels: myCustomLabels, 
      select:'-email -password'
    });
    return res.json(result);
  } catch(e) {
    res.status(500).json({ message: 'somthing went wrong, try again...  ERROR :' + e });
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...