Работа с изменениями схемы в Mongoose - PullRequest
69 голосов
/ 01 октября 2011

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

Ответы [ 3 ]

36 голосов
/ 08 января 2012

Забавно, однако, MongoDB был рожден, чтобы реагировать на проблемы со схемами в СУБД. Вам не нужно ничего переносить, все, что вам нужно сделать, это установить значение по умолчанию в определении схемы, если поле является обязательным.

new Schema({
    name: { type: string }
})

до:

new Schema({
    name: { type: string },
    birthplace: { type: string, required: true, default: 'neverborn' }
});
6 голосов
/ 01 сентября 2016

У меня была эта проблема, когда мне нужно было обновить базу данных, чтобы отразить изменения в моей схеме.После некоторых исследований я решил попробовать функцию updateMany () в консоли mongo, чтобы сделать обновления, и я думаю, что она работала довольно хорошо.

Чтобы применить это к примеру vimdude, код должен выглядеть следующим образом:

try { db.<collection>.updateMany( { birthplace: null }, { $set: {"birthplace": "neverborn" } } ); } catch(e) { print(e); }

Функция updateMany () обновит все документы в коллекции на основе фильтра.В этом случае фильтр ищет все документы, у которых поле 'место рождения' равно нулю.Затем он устанавливает новое поле в этих документах с именем «место рождения» и устанавливает его значение «никогда не рождается».

После запуска кода, измененного в соответствии с вашими обстоятельствами, выполните:

db.<collection>.find().pretty()

дляубедитесь, что изменения были сделаны.Новое поле «место рождения» со значением «никогда не рождаться» должно отображаться в конце каждого документа в вашей коллекции.

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

5 голосов
/ 25 февраля 2014

Обновление: Протестировано, это не работает в его текущем виде, у него есть правильная идея, я получил одну миграцию для работы со значительной настройкой самого модуля.Но я не вижу, чтобы это работало так, как задумано, без каких-либо серьезных изменений и отслеживания различных схем.


Звучит так, как будто вы хотите mongoose-data-migrations

Он предназначен для переноса старых версий схем ваших документов по мере их использования, что, кажется, является лучшим способом обработкимиграция в монгодб.

На самом деле вы не хотите запускать полные миграции наборов данных в коллекции документов (таблица изменений), так как это создает большую нагрузку на ваши серверы и может потребовать простоя приложения / сервера.Иногда вам может понадобиться написать скрипт, который просто захватывает все документы, применяет новую схему / изменения и сохраняет вызовы, но вам необходимо понять, когда и где это сделать.Например, добавление логики миграции в doc init приводит к большему снижению производительности, чем просто остановка сервера на 3 часа для запуска сценариев миграции.

Я нашел эту ссылку довольно полезнойтакже, в основном, повторяет вышеупомянутое более подробно и, по существу, реализует концепцию вышеуказанного пакета узла в php.

NB Модулю 5 месяцев, 0 вилок, но я осматриваюсь и могуне найти ничего лучше / полезнее, чем стиль ответа Абдельсаида ..

...