#javascript #node.js #express #routes
Вопрос:
Здравствуйте, у меня есть несколько маршрутов, и я получаю данные из базы данных
router.get('/', expressAsyncHandler(async (req,res) => {
const products = await Product.find({})
res.json(products)
}))
С помощью этого маршрута я получаю все продукты из MongoDB
Я хочу получить все товары одной категории, поэтому я начинаю пробовать новый маршрут
router.get('/roundBall', expressAsyncHandler(async (req,res) => {
const products = await Product.find({})
const roundball= products._category == 'Rounded'
res.json(products)
}))
Но это не работает, на моем локальном хосте я получаю ложь на экране. Кто-нибудь может помочь мне с этой проблемой?
Ответ №1:
В настоящее время все продукты извлекаются из MongoDB. Затем попытка фильтрации по категориям в node.js это неверно.
Один из способов устранить проблему-исправить то, как выполняется фильтрация на node.js сторона:
roundball
должно быть создано с помощью Array.filter
, таким образом.
const roundball= products.filter( product => product._category === 'Rounded')
Однако будет более эффективно запрашивать MongoDB только для продуктов, соответствующих нужной категории:
const roundball = await Product.find({_category: 'Rounded'})
Таким образом, меньше данных требуется для передачи между mongodb и node.js.
Комментарии:
1. Я следую рекомендациям, но моя единственная проблема в том, что он возвращает пустой массив json
2. Может ли поле «_категория» на самом деле быть написано «категория»? в данных» Округляется» с заглавной буквы?
3. да, я виноват, твой ответ верен. Спасибо тебе!
Ответ №2:
продукты._категория = = «Округлено» — это сравнение, поэтому оно всегда будет возвращать значение true вместо false. Что вам нужно сделать, так это сопоставить элементы и сравнить категорию каждого элемента с «Округленной».