Я борюсь с проблемой извлечения данных из БД и применения функции «нумерации страниц». В моем случае у меня есть интернет-магазин с несколькими пользователями. Каждый пользователь может опубликовать sh свой профиль и создать свою продукцию. На сайте я хотел бы показать продукты пользователей, которые опубликовали sh их профили.
В настоящее время это мой код:
Product.find({ active: true, deleted: false })
.sort({ created: -1 })
.populate({
path: 'user',
match: { isPublished: true },
select: 'details slug name',
})
.exec((error, products) => {
if (error) {
return response.status(500).send({ error: 'There was an error.' });
}
if (products === null) {
return response.status(404).send({ error: 'Products not found.' });
}
const productsWithPublishedTrainerProfile = _.filter(products, product => !_.isNull(product.user));
return response.status(200).send(_.map(productsWithPublishedTrainerProfile, product => mapProduct(product)));
});
Это работает - он выбирает все активные продукты, заполняет пользователя, который создал продукт, и если его профиль опубликован, то продукт не отфильтрованы.
Теперь мне нужно реализовать функцию «нумерации страниц», что означает, что я хочу использовать функции .skip()
и .limit()
, но этот пропуск / лимит будет работать для всех продуктов (не только для отфильтрованных). из них.) что означает, что конечная точка не будет возвращать точное количество продуктов (задается в функции limit()
.
Интересно, есть ли какое-либо решение для этого. Я прочитал о .aggregate
с настройка $lookup
, $skip
и $limit
, но после нескольких часов борьбы с ним я не смог заставить его работать.
Я буду очень признателен за любую помощь 101