1

我有这个猫鼬模式:

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

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

4

1 回答 1

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因为它绕过了默认值、设置器、中间件、验证等,这是使用像猫鼬这样的 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();
  }
});
于 2013-10-14T12:22:16.857 回答