2021年1月26日星期二

How to filter mongoDB in NodeJS API with endpoints, checking if values are included in objects in array

I am writing REST API in NodeJS with MongoDB. Structure of the database is:

[      {          "_id": "12345",          "name": "Meal name",          "category": "dessert",          "area": "british",          "imageUrl": "https.image.jpg",          "instructions": "some instructions...",          "ingredients": [              {                  "name": "salt",                  "measure": "1g"              },              {                  "name": "chicken",                  "measure": "1"              },              {                  "name": "butter",                  "measure": "90g"              }, ...          ]      }, ...  ]  

I can write a route to get data which meet one condition, i.e.:

//getting all, when category = :category  router.get('/meals/category=:category', async (req, res) => {    try {      const meals = await Meal.find({category: req.params.category})      res.json(meals)      } catch (err) {      res.status(500).json({ message: err.message })    }  })  

Here, route

'meals/category=vegetarian'

get all data with category = vegetarian.

However, I want to have route, which will filter all data by parameters: category, area, ingredients. For example:

meals/ingredients=salt,pepper&category=dessert&area=american

should return all data, which contains salt and pepper in array, and category = dessert.

another example:

meals/area=american&category=dessert

should return all data, where area=american and category=dessert

How can I write the router.get() method to achieve that?

https://stackoverflow.com/questions/65911521/how-to-filter-mongodb-in-nodejs-api-with-endpoints-checking-if-values-are-inclu January 27, 2021 at 09:07AM

没有评论:

发表评论