#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 в новую структуру документа. Тогда вы можете безопасно работать с вашим новым хранилищем талантов, поскольку все ваши документы будут иметь новую структуру.
Шаги будут примерно такими.
- Извлеките все ваши документы из коллекции talent
- Проверьте поля адресов всех документов, если это строка, преобразуйте ее в вашу новую структуру.
- Массовое обновление для всех этих измененных документов.
Тогда вам нужно принять во внимание возможность сбоя. Mongock теперь поддерживает транзакции, поэтому, если вы их используете, все в порядке.
Если нет, вам нужно разработать свой журнал изменений с учетом некоторых соображений. Эта ссылка дает вам некоторый контекст.
Также стоит взглянуть на документацию Mongock.
Последняя версия Mongock на данный момент — 4.1.15