javascript - 我无法从数据库中调用产品。(MongoDb - Nodejs)
问题描述
当我在搜索框中输入 phone 时,我在数据库中找到并获取了所有带有单词 phone 的类别。然后我想通过将这个类别的_id号与产品的类别id号匹配来找到产品。但我无法收集在单个数组中找到的产品。这就是为什么我不能将它们全部打印在屏幕上的原因。由于在数组中创建了两个不同的数组,因此它会打印第一个数组中的产品,但不会传递给第二个数组。
从图片中可以看出,我无法打印它,因为第三个产品在另一个数组中。
function escapeRegex(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
let model = [];
const searchRegex = new RegExp(escapeRegex(req.query.search), 'gi');
SubSubCategory.find({ "name": searchRegex})
.then(subsubcategoriesProduct => {
subsubcategoriesProduct.forEach(p => {
Product.find({ categories: p._id })
.then(finalProduct => {
model.push(finalProduct);
res.render('shop/products', {
title: 'Tüm Ürünler',
products: model,
path: '/products',
searchRegex: searchRegex
});
...
解决方案
我以这种方式解决了我的问题。
function escapeRegex(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
exports.getSearch = async (req, res, next) => {
try{
const subsubcategories = await SubSubCategory.find();
const subcategories = await SubCategory.find();
const categories = await Category.find();
if(req.query.search){
var searchRegex = new RegExp(escapeRegex(req.query.search), 'gi');
}
const subsubcategoriesProduct = await SubSubCategory.find({ "name": searchRegex}, '_id')
const ids = subsubcategoriesProduct.map(s => s._id);
const finalProduct = await Product.find({ categories: {$in: ids} });
res.render('shop/products', {
title: 'Tüm Ürünler',
products: finalProduct,
path: '/products',
categories: categories,
subcategories: subcategories,
subsubcategories: subsubcategories,
searchRegex: searchRegex,
inputs:{
takeSecondHand: '',
takeMinPrice: '',
takeMaxPrice: ''
}
});
}
catch(err){
next(err);
}
}
推荐阅读
- one-hot-encoding - 数据销毁模型的 One-Hot 编码?
- javascript - 如何连接 document.location.href 路径中的变量?
- python - 如何在 Windows 上获取有关硬盘的详细信息
- vuejs2 - 如何在 VueJs v-for 中显示图像
- ios - 导航控制器的最佳实践
- python - pygame中的面具之间的碰撞
- sql - SQL查询到节点红色折线图
- c - 统一测试时忽略用户输入
- python - 如何退出在多处理池中运行的 starmap_async 进程?
- flutter - 如何在开发过程中同时使用 Android 和 IOS 模拟器来测试我的 Flutter 应用程序?