Изменение схем в mongoDB / mongoose - PullRequest
10 голосов
/ 26 сентября 2011

Я начинаю с mongoDB и mongoose. Мне было интересно, как люди управляют развивающимися схемами . Например, если я начал с такой схемы:

user_ID : 123,
user_firstName : 'bob',
user_lastName : 'smith'

И развил это до чего-то вроде:

user_ID: 123,
user_name: [first:'bob', last:'smith']

Как я могу обновить или управлять старыми записями, которые были созданы с использованием старой схемы?

1 Ответ

13 голосов
/ 04 августа 2012

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

Например, преобразование firstName и lastName в новое поле user_name:

db.mycollection.find( { user_name : { $exists : false } } ).forEach(
    function (doc) {
        doc.user_name = {'first': doc.user_firstName, 'last': doc.user_lastName};

        // Remove old properties
        delete doc.user_firstName;
        delete doc.user_lastName;

        // Save the updated document
        db.mycollection.save(doc);
    }
)

Для более сложных миграций могут быть полезны следующие инструменты:

...