After googling StackOverflow, I find a similar question and solve my problem. Here is the code, right now, I didn't see any bug. But please let me know if there is anything that can be improved.
exports.getProductsSearchResult = (req, res, next) => {
let query = {};
const productCategory = req.query.category;
const productSize = req.query.size;
const productGender = req.query.gender
let payload = { "category": productCategory, "size": productSize, "gender": productGender }
if (payload.category && payload.category.length > 0) query.category = { $in: payload.category }
if (payload.size && payload.size.length > 0) query.size = { $in: payload.size };
if (payload.gender && payload.gender.length > 0) query.gender = { $in: payload.gender };
console.log('query', query)
Products.find(query).then(product => {
// console.log(product)
res.status(201).json(product)
}).catch(err => {
console.log(err)
})
}