坚持只改变字段

时间:2015-03-27 23:56:45

标签: java mongodb

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

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

1 个答案:

答案 0 :(得分:0)

您的申请所采取的步骤:

  1. 用户从MongoDB获取数据

  2. 此数据已部分修改

  3. 修改应保存

  4. 这意味着:修改数据的应用程序部分应该处理这个问题。


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

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

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

    这是一种可行的方法:

    1. Object data = mongoClient.getData();
    2. Object modifiedData = modify(data);
    3. Patch patch = Diff.diff(data, modifiedData);
    4. patch现在包含所有已更改的内容。现在你必须以某种方式使用Patch对象的内部并将其映射到MongoDB的$set命令。