在mongoDB/mongoose中更改模式

在mongoDB/mongoose中更改模式,mongodb,schema,database,nosql,Mongodb,Schema,Database,Nosql,我开始学习mongoDB和mongoose。我想知道人们是如何管理不断发展的模式的。例如,如果我从这样的模式开始: user_ID : 123, user_firstName : 'bob', user_lastName : 'smith' user_ID: 123, user_name: [first:'bob', last:'smith'] 然后进化成这样: user_ID : 123, user_firstName : 'bob', user_lastName : 'smith' u

我开始学习mongoDB和mongoose。我想知道人们是如何管理不断发展的模式的。例如,如果我从这样的模式开始:

user_ID : 123,
user_firstName : 'bob',
user_lastName : 'smith'
user_ID: 123,
user_name: [first:'bob', last:'smith']
然后进化成这样:

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

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

迁移涉及简单数据转换的文档模式的一种方法是查找缺少新字段的文档并进行迁移

例如,将firstName和lastName转换为新的用户名字段:

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);
    }
)
对于更复杂的迁移,一些可能有用的工具包括:

  • 或用于分析集合的当前架构
  • 用于验证文档

以这种方式删除属性对我不起作用。我需要像这样使用
db.mycollection.update({},{$unset:{user\u firstname:1,user\u lastname:1},{multi:true})