Какая лучшая практика (или инструмент) для обновления/миграции схем Mongoose при разработке приложения?
Работа с изменениями схемы в Mongoose
Ответ 1
Обновление: Протестировано, это не работает в его текущей форме, и у него есть правильная идея, я получил один переход для работы со значительной настройкой самого модуля. Но я не вижу, чтобы это работало, как предполагалось, без каких-либо серьезных изменений и каким-то образом отслеживать различные схемы.
Похоже, вы хотите, чтобы миграция mongoose-данных
Он предназначен для переноса старых версий схем ваших документов по мере их использования, что, по-видимому, является лучшим способом обработки миграций в mongodb.
На самом деле вы не хотите запускать полные миграции набора данных в коллекции документов (ala alter table), поскольку она сильно нагружает ваши серверы и может потребовать простоя приложений и серверов. Иногда вам может понадобиться написать script, который просто захватывает все документы, применяет новую схему/изменения и вызывает сохранение, но вам нужно понять, когда/где это сделать. Например, добавление логики миграции в doc init имеет больше производительности, чем удаление сервера в течение 3 часов для запуска сценариев миграции.
Я нашел эту ссылку довольно полезной, в основном повторяет вышеизложенное более подробно и по существу реализует вышеуказанную концепцию пакета node в php.
N.B. Модуль представляет собой 5-месячный старый, 0-вилки, но я оглядываюсь и не могу найти ничего лучшего/более полезного, чем стиль ответа от abdelsaid.
Ответ 2
Как ни странно, MongoDB родился, чтобы реагировать на проблемы схемы в РСУБД. Вам не нужно ничего переносить, все, что вам нужно сделать, - установить значение по умолчанию в определении схемы, если требуется поле.
new Schema({
name: { type: string }
})
в
new Schema({
name: { type: string },
birthplace: { type: string, required: true, default: 'neverborn' }
});
Ответ 3
У меня была эта проблема, когда мне нужно было обновить мою базу данных, чтобы отразить изменения в моей схеме. После некоторого исследования я решил попробовать функцию updateMany() в консоли mongo, чтобы сделать обновления, и я думаю, что он работал очень хорошо.
Чтобы применить это к примеру vimdude, код выглядел бы следующим образом:
try { db.<collection>.updateMany( { birthplace: null }, { $set: {"birthplace": "neverborn" } } ); } catch(e) { print(e); }
Функция updateMany() обновит все документы в коллекции на основе фильтра. В этом случае фильтр ищет все документы, где поле "Место рождения" равно null. Затем он устанавливает новое поле в тех документах, которые называются "местом рождения", и устанавливает его значение "никогда".
После запуска кода, измененного, чтобы отразить ваши обстоятельства:
db.<collection>.find().pretty()
чтобы проверить, что изменения были сделаны. Новое поле "место рождения" со значением "neverborn" должно отображаться в конце каждого документа в вашей коллекции.
Надеюсь, что это поможет.