2016-02-05 48 views
1

我正在使用Express-Restify-Mongoose庫爲REST API生成所有端點。Mongoose,在mongoose.model('core_user')後強制更改模式。schema = new mongoose.schema(...)

我將我的模式存儲在名爲'core_schema'的集合中。每次服務器啓動時,該集合中的所有記錄都使用find()方法獲取。這提供了具有定義模式的所有可用集合的數組。

db.on('open', function(){ 
    findDocs('core_schema', {}, function(docs){ 
    var tempString = JSON.stringify(docs); 
    var tempObj = JSON.parse(tempString); 

    for (var i = 0; i < tempObj.length; i++) { 
     var temp_schema = new mongoose.Schema(tempObj[i].schema_data, { collection: tempObj[i].collection_name }); 
     var temp_model = mongoose.model(tempObj[i].collection_name, temp_schema); 

     restify.serve(router, temp_model, { plural: false, name: tempObj[i].collection_name, preCreate: setDateTimes }); 
    } 
    }); 
}); 

我希望能夠更改架構來執行新的崗位的規則,但是當我嘗試使用類似的測試例子:

mongoose.model('core_user').schema = new mongoose.Schema({ 
    update_count:  { type: "String", required: false }, 
    created_date:  { type: "String", required: false }, 
    created_by:   { type: "String", required: false }, 
    updated_date:  { type: "String", required: false }, 
    updated_by:   { type: "String", required: false }, 
    first_name:   { type: "String", required: true }, 
    last_name:   { type: "String", required: true }, 
    username:   { type: "String", required: true }, 
    password:   { type: "String", required: true }, 
    somethingElse:  { type: "String", required: true } 
}, {collection: 'core_user'}) 

其中「somethingElse」是新字段我試圖強制它不強制執行它。我究竟做錯了什麼?有沒有辦法更新模型以使用新的模式?

回答

1

要更新Mongoose模式,您需要使用Schema.add方法。您可以更新使用下面的代碼的模型架構:

mongoose.model('core_user').schema.add({ somethingElse: { 
    type: 'String', 
    required: true 
}}); 
+0

哇,多數民衆贊成真棒,就像一個魅力,有一種簡單的方法來改變模式,並如果需要的話刪除字段? –