java - 仅保留更改的字段

标签 java mongodb

我有一个应用程序,它在用户连接时从数据库(Mongo)获取数据,并在用户断开连接时以固定的时间间隔保存数据,以减少服务器停机时数据丢失的可能性。我正在使用数据访问对象将用户保存到数据库,该数据库更新每个字段,无论它是否已更改。这可能会导致问题,例如当用户加入多个服务器并对其中一台服务器进行更改,但当用户与另一台服务器断开连接时,这些更改会被覆盖。

是否有任何既定的方法可以仅保留已修改的字段或任何执行此操作的框架?我不想为每个字段使用 boolean 值,因为我在 User 对象内有许多字段,并且向每个字段添加脏标志会显着增加类大小。

最佳答案

您的应用程序采取的步骤:

  1. 用户从 MongoDB 获取数据

  2. 此数据已部分修改

  3. 修改应该被保存

这意味着:应用程序中修改数据的部分应该注意这一点。

<小时/>

Spring 团队在几个月前推出了一些 Diff 工具:https://spring.io/blog/2014/10/22/introducing-spring-sync

使用它,您将获得一个 Patch 对象,其中仅包含更改。

Patch patch = Diff.diff(original, modified);

这是一种可能有效的方法:

  1. 对象数据 = mongoClient.getData();
  2. 对象modifiedData = 修改(data);
  3. 补丁 patch = Diff.diff(data,modifiedData);

补丁现在包含所有已更改的内容。现在,您必须以某种方式使用 Patch 对象的内部结构并将其映射到 MongoDB 的 $set 命令。

关于java - 仅保留更改的字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29312004/

相关文章:

java - 运行 opentaps 时无法从池中获取新连接

java - Jackrabbit 更新或合并节点

Mongodb 地理空间索引,2d 与 2dsphere

php - 排序后限制后的mongo排序 - 不工作

mongodb - Cloudera impala支持mongodb吗?

java - TCP 套接字创建类如何收到一个新对等点已添加到注册表的通知?

java - Spring Cloud 溪流和动物园管理员

java - 如何在 Java 中将 IP 地址范围转换为 CIDR?

python - 比较 MongoDB 和 RethinkDB 批量插入性能

mongodb - 返回截止日期为 + 12 小时的 mongodb 查询?