node.js - Mongoose:无法在保存回调中更新

标签 node.js mongodb mongoose

我有这个 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"});
    }
});

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

最佳答案

您需要向更新方法添加回调或调用#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 因为它绕过了默认值、setter、中间件、验证等,这也是使用 mongoose 这样的 ODM 的主要原因。我仅在处理私有(private)数据(无用户输入)和自动递增值时使用 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();
  }
});

关于node.js - Mongoose:无法在保存回调中更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19358370/

相关文章:

javascript - 将参数传递给 promise 。我必须打破链条吗?

node.js - 使用 prettier 自动格式化代码,onchange 不起作用

mongodb - 排除 $lookup 聚合中的字段

mongodb - 在 mongodb c# 驱动程序中使用 InsertBatch 方法的最佳批量项目数是多少?

node.js - 如何使用 JSDoc 进行解构导入?

javascript - 使用 Node 检查器调试远程 mocha.js 测试?

node.js - 使用 Jasmine-Node 进行测试时 Mongoose 模型自定义函数中的值消失

node.js - 当我向数据库添加路径时无法连接到 mongodb 容器

MongoDB - 按字段值分组文档

Mongodb集合对象总小时数集合