2017-02-16 73 views
0

處理遷移這是我原來的架構在貓鼬

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

這是我更新的模式

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

我真的必須創建與舊模式另一種模式找到()的舊文件並處理附件,然後使用更新的模式模型保存文檔,以便將我的集合成功遷移到新的模式?

回答

0

我通常在蒙戈外殼重命名傳統領域:db.message.updateMany({}, { $rename: { "attachments": "attachments_v1" } });和使用

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

過渡邏輯一段時間以分散負荷和修改的文件被訪問,當他們。如果集合足夠小,則可以一次轉換所有內容。如果轉換邏輯很簡單,你可以從shell中完成。否則,寫一個貓鼬腳本來完成這項工作。

+0

我也考慮過這個解決方案..但我認爲這是更長的,因爲我必須添加一個字段,然後處理集合,然後刪除字段 – John

+1

當然,問題是*我真的必須*,答案是否定的。還有其他選擇。選擇哪一個取決於許多因素,最重要的是轉換邏輯,集合的大小,可接受的停機時間等。 –