为什么Model.save()在Sails.js中不起作用?

时间:2014-10-01 13:19:43

标签: node.js mongoose sails.js sails-mongo

保存()给我一个类似&#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)});
         }
})

有关如何在更新查询中保存模型的任何想法。 ??

2 个答案:

答案 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之前检查modelCountry.update是否存在,并相应地更改model(或其副本)?这样可以节省额外的数据库调用。

答案 1 :(得分:1)

当使用mongoose(3.8)直接更新数据库时,回调函数接收3个参数,其中没有一个是定义模型的猫鼬对象。参数是:

  • 错误是发生错误
  • numberAffected是Mongo报告的更新文件数
  • rawResponse是Mongo的完整回复

正确的方法是,首先获取然后更改数据:

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)