如何处理用户更新同一个MongoDB文档

Posted

技术标签:

【中文标题】如何处理用户更新同一个MongoDB文档【英文标题】:How to deal with users updating the same MongoDB document 【发布时间】:2019-05-01 12:21:53 【问题描述】:

我有一个平均堆栈应用程序,其中有多个用户将同时使用该应用程序。我不担心如果他们同时更新文档会发生什么,因为 MongoDB 会处理这个问题。我的问题是

    用户 1 加载文档 用户 2 加载文档 用户 1 更新文档 用户 2 10 秒后更新文档

在这种情况下,用户 2 将永远不会看到文档的更新版本。通过在请求中发送文档的原始版本以查看它是否已更改并在已更改时返回错误来处理此问题的最佳方法是什么?

【问题讨论】:

【参考方案1】:

我是 MongoDB 新手,刚刚开始研究它。我也有这个问题,我想我有一个解决方案,尽管我仍然必须使用一些代码进行测试。

在您的文档中创建一个版本控制字段。那么:

在独立服务器上使用db.collection.findAndModify() 并通过_id 和当前文档版本字段进行查询。将 upsert 设置为 false。在即将更新的文档中增加版本字段。

修改单个文档时,findAndModify 和 update() 方法以原子方式更新文档。

在副本集上使用Transactions

Mongoose 5.2.0 includes this feature 也是如此。

事务是 MongoDB 4.0 和 Mongoose 5.2.0 中的新功能。交易 让您单独执行多个操作并可能撤消 如果其中一项失败,则执行所有操作。

【讨论】:

以上是关于如何处理用户更新同一个MongoDB文档的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB在admin库下面执行了db.dropAllUsers()导致没有管理权限要如何处理

使用mongodb在utc中存储日期时如何处理时区问题?

如何处理MongoDB中的多对多关系?

使用mongodb在nodejs中使用锁定/事务读取和插入文档

使用mongodb在nodejs中使用锁定/事务读取和插入文档

MongoDB:如何处理两个用户同时上传相同的用户名或密码