Работа с изменениями схемы в Мангусте


какова наилучшая практика (или инструмент) для обновления/миграции схем мангустов по мере развития приложения?

3 66

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 " должно отображаться в конце каждого документа в вашей коллекции.

надеюсь, что это поможет.