Mongoose:无法在保存回调中更新

时间:2013-10-14 10:37:58

标签: node.js mongodb mongoose

我有这个猫鼬模式:

var UrlSchema = new mongoose.Schema({
   description: String
});

然后,我创建了一个模型实例:

var newUrl = new Url({
  "description": "test"
});

newUrl.save(function (err, doc) {

  if (err) console.log(err);
  else{
      Url.update({_id: doc._id},{description: "a"});
    }
});

但是进行了任何更新......为什么? 感谢

1 个答案:

答案 0 :(得分:2)

您需要为更新方法添加回调或调用#exec()来执行更新:

var newUrl = new Url({
  "description": "test"
});

newUrl.save(function (err, doc) {

  if (err) console.log(err);
  else{

    Url.update({_id: doc._id},{description: "a"}, function (err, numAffected) {
        // numAffected should be 1
    });

    // --OR--
    Url.update({_id: doc._id},{description: "a"}).exec();

  }
});

仅供参考:我个人远离update,因为它绕过默认设置,设置器,中间件,验证等,这是使用像mongoose这样的ODM的主要原因。我在处理私有数据(没有用户输入)和自动递增值时只使用update。我会改写为:

var newUrl = new URL({
  "description": "test"
});

newUrl.save(function(err, doc, numAffected) {
  if (err) console.log(err);
  else {
    doc.set('description', 'a');
    doc.save();
  }
});