【发布时间】:2018-01-12 04:33:23
【问题描述】:
我有一个 hazelcast IMap,我在其中覆盖了加载、存储等其他功能,以便在我的 MongoDB 数据库中也进行备份。因此,当 hazelcast IMap 有一个补充时,MongoDB 中也会进行相应的备份。但是如何覆盖替换功能?我希望每当 hazelcast 地图的现有条目有更新时,相应的 MongoDB 文档也应该有更新。
编辑:这是我的 store 方法的代码
public void store(Key key, Doc value) {
ObjectMapper objectMapper = new ObjectMapper();
try {
String json = objectMapper.writeValueAsString(value);
BasicDBObject document = (BasicDBObject) JSON.parse(json);
this.collection.insertOne(new Document(document));
} catch (JsonProcessingException e) {
e.printStackTrace();
}
我正在使用 MapStore 并覆盖加载、存储等功能,以在 MongoDB 上启用备份。现在我有一个 MongoDB 集合,其中包含带有自动生成的 id 的条目。然而,我的 hazelcast 地图会获取 5 个字段并创建一个关键对象,并存储与关键对象对应的文档。该映射基本上是<Key, Doc> 格式,其中 Key 本身是一个包含五个字段的类。
所以当我使用替换功能时,(map.replace(Key, Doc)),与 Key 对应的 Doc 在 hazelcast 映射中更新,但 MongoDB 插入另一个文档,其 id 作为一些系统参数(如时间戳等)的组合,值为正确的文件。但是我希望它更新相同的条目,但是我应该在哪里指定 mongodb 的代码以从文档中获取“id”字段并更新该文档本身?
编辑 2:
我意识到我需要更新 store 函数以使其搜索具有相同 id 的现有文档并更新它,如果它不存在则插入它。现在的问题是,当 hazelcast 尝试调用 store 函数时,我获得的 id 完全不同,是时间戳、机器标识符、进程标识符等的组合。为什么会这样?
当我从地图中获取对象时,它具有 mongodb 的 id,但是当我修改然后将其插入回来时,它具有不同的 id?
【问题讨论】:
标签: mongodb hazelcast mongo-java hazelcast-imap