1

Save() 给我错误,例如“对象没有方法‘保存’”

Country.update({id:req.param('country_id')},model).exec(function(err,cntry){

         if(err) 返回 res.json(err);

         如果(!cntry.image){

               cntry.image = '图片/国家/'+文件名;
               cntry.save(function(err){ console.log(err)});
         }
})

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

4

2 回答 2

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)});
         }
});

不过,在我看来,这似乎是一段奇怪的代码;为什么不在做之前检查imagein的存在并相应地更改(或其副本)?这将为您节省额外的数据库调用。modelCountry.updatemodel

于 2014-10-01T20:37:20.750 回答
1

当使用 mongoose (3.8) 直接更新数据库时,回调函数接收 3 个参数,此时都不是定义模型的 mongoose 对象。参数是:

  • err 是发生的错误
  • 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) 
于 2014-10-01T14:27:11.973 回答