Angels
Angels

Reputation: 345

MongoDB passing query from request

I want to add filteration to my product list by product types from query.

Lets say I want to implement this:

Product.find({
   "product_type.name": {
     $in: ["A", "B"]
   }
})

Which filters my products which either has type "A" or "B". But I dont always want to filter, thats why from the request I see whether we have this filteration or not. So I check like:

let query = {}
if (req.query.product_type) {
    query.product_type.name =  {
     $in: ["A", "B"]
   }
}

Where product_type = ["A", "B"] coming from request.

Then:

Product.find(query)

when I run this I get the error

TypeError: Cannot set property 'name' of undefined.

I want the query value to be like

   "product_type.name": {
     $in: ["A", "B"]
   }

Upvotes: 1

Views: 72

Answers (1)

Dheemanth Bhat
Dheemanth Bhat

Reputation: 4452

So as @willis suggested do the following

let query = {};

if (Array.isArray(req.query.product_type) && req.query.product_type.length > 0) {
    query["product_type.name"] =  {
        $in: req.query.product_type
    }
}

Upvotes: 2

Related Questions