Как преобразовать тип Mongo db из String в Object для существующего документа

#spring #mongodb

#spring #mongodb

Вопрос:

Я использую Spring, mango db и mongock. Когда я начал работать над проектом hen, объект Mongo имеет один столбец (адрес) типа String. Но теперь его тип изменен на string для адреса object. Как показано ниже в коде. Теперь это решение отлично работает для нового объекта, но при попытке получить существующий

Старый код :

 @Document(collection = PersistenceConstants.TALENT_COLLECTION)
    public class Talent extends AbstractMongoEntity<String>{
        private String address;
    }
  

Новый код :

 @Document(collection = PersistenceConstants.TALENT_COLLECTION)
    public class Talent extends AbstractMongoEntity<String>{
        private Address address;
    }

{"city","", "country":"India"} 
  

Но при попытке извлечь старые записи система выдает

 No converter found capable of converting from type [java.lang.String] to type
  

Кто-нибудь может сказать мне, как обойти эту проблему.

Комментарии:

1. Я думаю, вам следует перенести весь документ Talent в новый документ Talent2 с правильным форматом, после чего использовать его вместо документа Talent. 🙂

Ответ №1:

по сути, для этого и предназначен Mongock. Вы столкнулись с проблемой переноса данных. Итак, решение заключается в создании журнала изменений Mongock (модуль миграции) для преобразования старых документов talent в MongoDB в новую структуру документа. Тогда вы можете безопасно работать с вашим новым хранилищем талантов, поскольку все ваши документы будут иметь новую структуру.

Шаги будут примерно такими.

  1. Извлеките все ваши документы из коллекции talent
  2. Проверьте поля адресов всех документов, если это строка, преобразуйте ее в вашу новую структуру.
  3. Массовое обновление для всех этих измененных документов.

Тогда вам нужно принять во внимание возможность сбоя. Mongock теперь поддерживает транзакции, поэтому, если вы их используете, все в порядке.

Если нет, вам нужно разработать свой журнал изменений с учетом некоторых соображений. Эта ссылка дает вам некоторый контекст.

Также стоит взглянуть на документацию Mongock.

Последняя версия Mongock на данный момент — 4.1.15