java - 并发更新同一个集契约(Contract)一个文档

标签 java mongodb mongodb-java

问题陈述

如何处理同一集合和同一文档上的并发更新命令。

当前数据库结构

编辑 - 结构已更改

  {
     "userId":1,
     "summary_extra":[
        {
           "some_id":1,
           "names":[
              "one",
              "two"
           ]
        },
        {
           "some_id":2,
           "names":[
              "three",
              "four"
           ]
        }
     ]
  },
  {
     "userId":2,
     "summary_extra":[
        {
           "some_id":1,
           "names":[
              "one",
              "two"
           ]
        },
        {
           "some_id":2,
           "names":[
              "three",
              "four"
           ]
        }
     ]
  }

如果一次有一个用户尝试更新,则更新文档不会出现任何问题。但是,如果有多个用户(最少可能有 10 个),那么我如何更新同一文档。

在这种情况下我该怎么办?

N:B 数据是准确的,但结构与我完全相同。

编辑:所以现在我想我可以由多个用户同时更新同一集合中的两个不同文档?

最佳答案

您可以包含一个版本字段,该字段会随着每次更新而递增(更新和查询过滤器中会多一个 $inc)。然后,如果有人更新了文档,使其与您所拥有的版本不同,则无法进行任何更新。如果您使用 Morphia,@Version 注释会透明地为您处理此问题。

关于java - 并发更新同一个集契约(Contract)一个文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30193283/

相关文章:

mongodb - 如何在 MongoDB 中存储 blob 数据?

mongodb - 如何在 Mongo Java 驱动程序 2.13.0 中使用给定的用户名和密码对任何数据库进行身份验证?

Java RegEx 未按预期工作

java - Java 5 中的 CXF - 额外的 Maven 依赖项

java - play2 在子模块/子项目中使用主项目 View / Controller /模型,反之亦然

mongodb - 想从我的应用服务器连接到我的 mongodb 服务器

python - 在 64 位 Windows 7 上使用 easy_install 时出现问题。 (找不到 python.exe)

java - 如何: Docker container running java jar connecting to host mysql server?

c# - 为所有类实现 BsonIgnoreExtraElements

java - 使用java获取mongoDB中打开的连接数