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