在NodeJS/MongoDB中构建产品过滤器:仅在选择所有过滤器时有效



我正在nodeJS中构建一个产品过滤器。当i硬代码以下find((时,它就工作了

const products = await Product.find({
price: {
$gte: price[0],
$lte: price[1],
}, category: categories, shipping: shipping})

当然,问题是只有在前端输入所有搜索选项时,它才会给出结果。但是,如果我选择NOT输入所有搜索选项,我也希望过滤器能够工作。因此,我想出了以下代码,将所有过滤器存储在一个数组中,但它没有给出任何结果。阵列的输出为=

{ price: { '$gte': 0, '$lte': 40820 } },
{
category: [
'60657e1d328b25043581e46f',
'601ef1ea8e06fc04cdaa5080',
'601eeaeb8e06fc04cdaa507f'
]
},
{ shipping: 'Yes' }
] <<<_--- content of searchArry????

这是我的代码,但没有返回结果=

exports.searchFilters = async (req, res) => {
try {
const categories = req.body.categoryIds;
const price = req.body.price; 
const shipping = req.body.shipping;
console.log(price, "<<<------- price data received in backend???"); 
console.log(categories, "<<--- categories data received in backend???"); 
console.log(shipping, "<<---- shipping data received in backend"); 

const searchArray = [];

if (req.body.price) {
const price = {
$gte: req.body.price[0],
$lte: req.body.price[1],
}
searchArray.push({ "price" : price });
}
if (req.body.categoryIds) {

searchArray.push({ "category" : categories });
}
if (req.body.shipping) {

searchArray.push({ "shipping" : shipping });
}
console.log(searchArray, "<<<_--- content of searchArry????");
const products = await Product.find({searchArray})
.populate("category", "_id name") 
.populate("subs", "_id name") 
.populate("postedBy", "_id name") 
.exec(); 

res.json(products);
// console.log(products, "<<--producte?? ") console.log(products.length, "<<--- lengte") } catch(err) { console.log(err); }}
} catch(err) {
console.log(err);
}
}

您的硬编码呼叫如下所示:

Product.find({price, category, shipping}) // the arg is an object

第二个调用(使用searchArray(看起来像:

Product.find({searchArray: [{price}, {category}, {shipping}]}) // the arg is an object containing an array of objects

尝试将searchArray的元素合并为单个对象:

Product.find(Object.assign({}, ...searchArray))

注意:{variableName}{variableName: variableName}{"variableName": variableName}的缩写

最新更新