保存()给我一个类似&#34的错误;对象没有方法'保存'"
Country.update({id:req.param('country_id')},model).exec(function(err,cntry){ if(err) return res.json(err); if(!cntry.image){ cntry.image = 'images/countries/'+filename; cntry.save(function(err){ console.log(err)}); } })
有关如何在更新查询中保存模型的任何想法。 ??
答案 0 :(得分:2)
假设您正在使用Waterline和sails-mongo,这里的问题是update
返回一个数组(因为您可以一次更新多个记录),并且您将其视为一个单一记录。尝试:
Country.update({id:req.param('country_id')},model).exec(function(err,cntry){
if(err) return res.json(err);
if(cntry.length === 0) {return res.notFound();}
if(!cntry[0].image){
cntry[0].image = 'images/countries/'+filename;
cntry[0].save(function(err){ console.log(err)});
}
});
然而,这对我来说似乎是一个奇怪的代码;为什么不在image
之前检查model
中Country.update
是否存在,并相应地更改model
(或其副本)?这样可以节省额外的数据库调用。
答案 1 :(得分:1)
当使用mongoose(3.8)直接更新数据库时,回调函数接收3个参数,其中没有一个是定义模型的猫鼬对象。参数是:
正确的方法是,首先获取然后更改数据:
Country.findOne({id: req.param('country_id')}, function (err, country) {
// do changes
})
或者按照预期的方式使用更新方法:
Country.update({id: req.param('country_id'), image: {$exists: false}}, {image: newValue}, callback)