我写的代码从url获取id然后给我输出。 api?category = 4556这里4556是id。 我有一个产品控制器
并且在类别控制器中我有category_name。
在这里,我希望以这种方式 API?类别=游戏 有没有办法这样做。
exports.getProducts = function(req, res) {
// Use the Prod model to find all products
/*
Prod.find(function(err, prods) {
if (err)
res.send(err);
res.json(prods);
next();
});
*/
var cat=req.query.category;
var condition = {};
if (cat) {
condition.cat_id = cat;
}
Prod.find(condition).then(function(cat) {
res.json({cat});
})
.catch((err) => {
console.log('error', err);
res.status(500).send();
});
};
此代码检查具有类似于url提供的id的cat_id的产品为?category = 4556 我想把它检查为?category = games, 如果有某种方式请帮助它会很高兴。提前谢谢
答案 0 :(得分:1)
我找到了一个答案,这确实可以使用populate
var cat=req.query.category;
var condition = {};
if (cat) {
condition.cat_id = cat;
}
Prod.find(condition).populate('cat_id').then(function(cat) {
res.json({cat});
})
.catch((err) => {
console.log('error', err);
res.status(500).send();
});
};

并在Schema中做了一点改变
var ProductSchema=new mongoose.Schema({
name:String,
category:String,
price:Number,
cat_id:{
type : mongoose.Schema.Types.ObjectId,
ref : 'Cat'
}
});
// Export the Mongoose model
module.exports=mongoose.model('Prod',ProductSchema);

答案 1 :(得分:0)
您必须首先从查询中提供的名称中检索类别ID。
如果未找到具有提供名称的类别,您可能希望返回空产品数据集。我还假设类别名称是唯一的。
示例:
exports.getProducts = function(req, res) {
var categoryName = req.query.category;
var condition = {};
if (categoryName) {
condition.name = categoryName;
}
Category.find(condition).then(function(categories) {
if(categories.length === 0) return {}
return Product.find({ category_id: categories[0].id })
}).then(function(products) {
res.json(products);
}).catch((err) => {
console.log('error', err);
res.status(500).send();
});
};
答案 2 :(得分:0)
如果您想查找与您的类别名称相对应而不是您的ID,那么您只需要进行一次更改。从请求查询中获取类别名称(因为您目前从请求查询中获取ID)。休息你的代码会一样。
我认为您的类别名称也是唯一的。
exports.getProducts = function(req, res) {
// Use the Prod model to find all products
/*
Prod.find(function(err, prods) {
if (err)
res.send(err);
res.json(prods);
next();
});
*/
var cat=req.query.categoryName;
var condition = {};
if (cat) {
condition.cat_Name = cat;
}
Prod.find(condition).then(function(cat) {
res.json({cat});
})
.catch((err) => {
console.log('error', err);
res.status(500).send();
});
};
希望它对你有用。 感谢。