Reputation: 345
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
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