Возьмите конкретные данные из базы данных с помощью nodejs

#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. Что вам нужно сделать, так это сопоставить элементы и сравнить категорию каждого элемента с «Округленной».