【问题标题】:Node.js and MongoDB using Mongoose. Unable to increment doc version using findByIdAndUpdate使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本
【发布时间】:2018-06-14 23:54:16
【问题描述】:

我目前面临一个问题,当两个人在我的 Angular 应用程序中的同一页面上工作时,他们会互相覆盖。我可以看到的问题是文档版本没有增加,因此 mongo 不会检查文档版本是新的还是旧的。有人可以指导我如何解决这个问题。下面是我的代码 sn-p。

    var art = new Article(pageBody);
    Article.findByIdAndUpdate(art._id, pageBody, { new: true, upsert: true},{$inc: {art.v: 1 }}, function(err, model) {
      console.log(art.__v);
      // NOTE: new page will never happen here, moved to issue controller
      if (err) {
        err = {
          source: 'Article.findByIdAndUpdate',
          bodyPageId: pageBody._id,
          articleId: art._id,
          message: err.message,
          err: err.toString()
        };
      }
      cb(err);
    });
  } else {
    console.log(art.__v);
    cb();
  }

【问题讨论】:

    标签: angularjs node.js mongodb


    【解决方案1】:

    在查询的更新部分,上下文不是本地文章实例,而是找到的文档,因此您想像这样更新:

    { $inc: { v: 1 } }
    

    使用您当前的代码,MongoDB 在您的文章中创建一个名为 "art" 的新子文档,其中包含一个名为 "v" 的字段,这不是您想要的:

    {
      art: {
        v: 1
      }
    }
    

    【讨论】:

    • 感谢您的回复。效果很好,但是我注意到该函数实际上并没有对版本进行错误处理,例如假设您更新模型或数据它将是 v2 但如果我也更新模型而不刷新它也是 v2 但您的数据已被删除。知道如何使用内置版本控制的 Mongodbs 吗?
    • 我不确定我是否理解...?!
    • 对此感到抱歉。我的意思是有一个场景,我创建了一个 cms,用户可以使用它来创建 html 页面,比如杂志。现在,当两个人在同一个页面上工作时,不会出现错误或警告向人们显示他们的更改已过时。我的意思是第一个用户的 versionkey 是 3,第二个用户是 1。由于一个小于 3,他们应该收到一条错误消息,指出除非刷新,否则无法保存。
    • 对我来说这听起来更像是一个应用程序/错误处理主题。您应该能够构建一些东西来很好地支持这些场景b) 使用 Websockets (dontpanicblog.co.uk/2016/04/17/…) 通知您的客户同时编辑您的文档。
    猜你喜欢
    • 2013-05-05
    • 1970-01-01
    • 2012-02-07
    • 2021-08-29
    • 1970-01-01
    • 2020-01-13
    • 2015-05-25
    • 2021-10-23
    • 2017-09-22
    相关资源
    最近更新 更多