在我的项目中我有2个型号:商店和产品,基本上每个商店都可以有多个产品,但每个产品都可以与1个商店相关,所以要建立我做过的模型:
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var produtoSchema = mongoose.Schema({
nome:{
type:String, required:true
},
stock:{
type:Number
},
descricao:{
type:String
},
categoria:{
type: String, required:true
},
tamanho:{
type: String, required:true
},
data:{
type: Date, default: Date.now
},
preco:{
type: Number,required:true, default: 0
}
});
module.exports = mongoose.model('Produto',produtoSchema);
我的产品是这样的
//adiciona um produto a uma loja especifica
router.post('/:id/produtos',function(req,res){
Loja.findById(req.params.id,function(err,loja){
if(!loja){
return res.status(404).json({Error:"Loja nao encontrada"});
}
if(JSON.stringify(req.body) == "{}")
{
return res.status(400).json({Error:"Your request is empty"});
}
var produto = new Produto(req.body);
loja.produtos.push(produto);
loja.save(function(err){
if(err){
return res.status(500).json({Error:"Server problem"});
}
res.status(200).json({message: "product added"});
});
})
})
你们可以看到我在商店方面有参考,基本上我想要的是每次添加产品时我都会将该产品直接添加到商店(storeID),所以要做到这一点我把它添加到我的商店旁路:
func NewAssetHandler(mc my.Client) AssetHandler {
return AssetHandler{mc}
}
我遇到了两个问题:当我进入我的产品路线时,我得到一个空阵列,我应该到达所有产品,我认为产品没有被添加到产品的模型中,第二个问题是:每个我将产品添加到我的商店,并用.populate查看我的所有商店我只能在产品数组中看到一个ID,我应该看到所有产品细节,我做错了什么?:S
答案 0 :(得分:0)
将你的mongoose更新为4.8.1,因为4.7.6因为投射ID而错误。
然后转到你的lojas.js并在顶部要求mongoose。
用此
替换您的代码 router.post('/:id/produtos',function(req,res){
var queryObject = {_id : mongoose.Types.ObjectId(req.params.id)};
Loja.findById(queryObject,function(err,loja){
console.log(err);
if(!loja){
return res.status(404).json({Error:"Loja nao encontrada"});
}
if(JSON.stringify(req.body) == "{}")
{
return res.status(400).json({Error:"Your request is empty"});
}
var produto = new Produto(req.body);
produto.save(function (err) {
if(err){
return res.status(500).json({Error:"Server Problem"})
}
loja.produtos.push(produto._id);
loja.save(function(err){
if(err){
return res.status(500).json({Error:"Server problem"});
}
res.status(200).json({message: "product added"});
});
});
})
})