Это очень хороший вопрос.
Хорошая часть ориентированных на документы баз данных, таких как MongoDB, заключается в том, что документы из одной и той же коллекции не должны иметь одинаковые поля.Наличие разных полей само по себе не вызывает ошибку.Это называется гибкостью.Это также плохая часть, по тем же причинам.
Так что проблема, а также решение исходит из логики вашего приложения.
Допустим, у нас есть модель Person, и мы хотим добавитьполе.В настоящее время в базе данных сохранено 5.000.000 человек.Проблема в следующем: как добавить это поле и сократить время простоя?
Возможное решение:
Измените логику приложения, чтобы оно могло справиться с обоимичеловек с этим полем и человек без этого поля.
Напишите задачу, которая добавляет это поле каждому человеку в базе данных.
Обновите производственное развертывание с помощью новой логики.
Запустите сценарий.
Таким образом, единственное время простоя - это несколько секунд, которые требуются для повторного развертывания.,Тем не менее, нам нужно проводить время с логикой.
Таким образом, в основном нам нужно выбрать, какой из них более ценен для рабочего времени или нашего времени.
Теперь допустим, что мы хотим пересчитать поле, такое как значение НДС.Мы не можем сделать то же самое, что и раньше, потому что некоторые продукты с НДС А и другие с НДС Б. не имеют смысла.
Итак, возможное решение будет:
Измените логику приложения, чтобы оно показывало, что значения НДС обновляются, и отключите операции, которые могут его использовать, например, покупки.
Напишите скрипт для обновления всех значений НДС.
Повторно разверните с новым кодом.
Запустите скрипт.Когда он закончится:
Повторное развертывание с полным кодом операции.
Таким образом, не абсолютное время простоя, а только частичное отключение некоторых специфических компонентов,Пользователь может продолжать видеть описание продуктов и использовать другие части приложения.
Теперь допустим, что мы хотим опустить поле.Процесс будет примерно таким же, как и первый.
Теперь, перемещая поля в встраиваемые документы;это хорошо!Процесс будет похож на первый.Но вместо проверки существования поля нам нужно проверить, является ли это внедренным документом или полем.
Вывод такой: база данных, ориентированная на документы, обладает большой гибкостью.И так у вас есть элегантные варианты в ваших руках.Используете ли вы его или нет, зависит от того, цените ли вы больше времени на разработку или время своего клиента.