#database #mongodb #express #mongoose
#База данных #mongodb #экспресс #мангуст
Вопрос:
Я довольно новичок в MongoDB, поэтому прошу прощения, если моя терминология неверна. Я работаю над проектом электронной коммерции (учебный проект) с express, mongoose и ejs, и я хочу добавить опцию фильтра на страницу «Все товары». Так, например, если кто-то хочет просматривать только «спортивные» продукты, я хотел бы иметь возможность обновлять (ПОМЕЩАТЬ) текущую страницу только «спортивными» продуктами.
Чтобы достичь этого прямо сейчас с моим текущим набором навыков, я бы создал отдельный маршрут для каждой категории продуктов, /products/sports
а затем Product.find({ category: 'Sports' })
в моем контроллере, а затем отобразил его в моем ejs-файле с чем-то вроде
<% sportsProducts.forEach(product => { %> <% display each product here %>
Я чувствую, что это вообще неправильный подход, поскольку было бы сложно масштабировать проект, и у меня могут возникнуть проблемы с отображением определенного количества продуктов на странице. Для этого мне нужен API или AJAX? Я бы предпочел держаться подальше от них, если это возможно.
Я просто надеюсь, что кто-нибудь сможет указать мне правильное направление, поскольку многие возможности mongodb мне неизвестны
Ответ №1:
Здесь вы можете следовать этим двум подходам
- сделайте свой маршрут динамическим, как /products/:category, затем в коде
Product.find({category:req.params.category})
- Добавьте категорию в качестве параметра запроса в свой маршрут / продукты? категория = спорт
Product.find({category:req.query.category})
Комментарии:
1. Спасибо! этот первый подход работает отлично. у меня есть дополнительный вопрос, если вы готовы мне снова помочь; скажем, у меня есть 20 «спортивных» продуктов, и я хочу отображать только 5 продуктов на странице, как я могу подойти к этому?
2. сначала просто отсортируйте данные, затем добавьте пропуск и ограничение после выражения find, например Product.find({conditions}).sort(в нужном порядке).skip(x).limit(5) вы можете извлечь этот пропуск из параметров запроса на основе страницы * 5, чтобы узнать больше об этом просто изучитекак работает разбивка на страницы!