У меня есть IMap hazelcast, в котором я переопределил загрузку, хранение и т. Д., Другие функции, так что резервная копия также выполняется в моей базе данных MongoDB. Таким образом, когда есть дополнение к IMap hazelcast, в MongoDB также создается соответствующая резервная копия. Но как мне переопределить функцию замены? Я хочу, чтобы всякий раз, когда происходит обновление существующей записи карты hazelcast, должно быть обновление и в соответствующем документе MongoDB.
Изменить: это код моего метода хранения
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, в которой есть записи с автоматически сгенерированными идентификаторами. Однако моя карта hazelcast извлекает 5 полей и создает ключевой объект и сохраняет документ, соответствующий ключевому объекту. Карта в основном имеет формат <Key, Doc>
, где сам ключ представляет собой класс из пяти полей.
Поэтому, когда я использую функцию замены (map.replace(Key, Doc)
), документ, соответствующий ключу, обновляется на карте hazelcast, но MongoDB вставляет другой документ с идентификатором в виде комбинации некоторых системных параметров, таких как временная метка и т. Д., И значение в качестве правильного документа. Однако я хочу, чтобы он обновил ту же запись, но где мне указать код для mongodb, чтобы получить поле «id» из документа и обновить сам этот документ?
Изменить 2:
Я понял, что мне нужно обновить функцию хранилища, чтобы она выполняла поиск существующего документа с тем же идентификатором и обновляла его, если он не существует, вставьте его. Теперь вопрос в том, что идентификатор, который я получаю, когда hazelcast пытается вызвать функцию хранилища, совершенно другой, это комбинация отметки времени, идентификатора машины, идентификатора процесса и т. Д. Почему это так?
Когда я получаю объект с карты, у него есть идентификатор, который был у mongodb, но когда я изменяю, а затем вставляю его обратно, у него другой идентификатор?