我正在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}
的缩写