在猫鼬中处理迁移

Handling migration in mongoose

这是我的原始架构

var MessageSchema = new Schema({  
    attachments: [String]
});

这是我更新的架构

var MessageSchema = new Schema({  
    attachments: [{
        fileType: String,
        extension: String,
        url: String
    }]
});

我真的必须使用旧架构创建另一个模型来查找()旧文档并处理附件,然后使用更新的架构模型保存文档,以便将我的集合成功迁移到新架构?

我通常重命名 mongo shell 中的遗留字段:db.message.updateMany( {}, { $rename: { "attachments": "attachments_v1" } } ); 并使用

var MessageSchema = new Schema({
    attachments_v1: [String],  
    attachments: [{
        fileType: String,
        extension: String,
        url: String
    }]
});

在一段时间内使用转换逻辑来分散负载并在访问文档时修改文档。如果集合足够小,您可以一次性转换所有内容。如果转换逻辑很简单,您可以从 shell 开始。否则,编写一个 mongoose 脚本来完成这项工作。