在mongoDB/mongoose中更改模式

wil*_*age 10 database schema mongodb nosql

我开始使用mongoDB和mongoose.我想知道人们如何管理不断发展的模式.例如,如果我开始使用这样的架构:

user_ID : 123,
user_firstName : 'bob',
user_lastName : 'smith'
Run Code Online (Sandbox Code Playgroud)

并将其演变为以下内容:

user_ID: 123,
user_name: [first:'bob', last:'smith']
Run Code Online (Sandbox Code Playgroud)

如何更新或管理使用旧架构设计建立的旧记录?

Ste*_*nie 13

迁移涉及简单数据转换的文档模式的一种方法是使用$ exists来查找缺少新字段并迁移它们的文档.

例如,将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);
    }
)
Run Code Online (Sandbox Code Playgroud)

对于更复杂的迁移,一些可能有用的工具是: