Mongoose,在mongoose.model('core_user')之后强制更改模式.schema = new mongoose.schema(...)

时间:2016-02-05 00:25:47

标签: javascript node.js mongodb mongoose

我使用Express-Restify-Mongoose库生成REST API的所有端点。

我将我的模式存储在名为“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 });
    }
  });
});

我希望能够对架构进行更改以强制执行新的POST规则,但是当我尝试使用如下的测试示例时:

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 个答案:

答案 0 :(得分:1)

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

screenOutput=$(screen -aA -x sctest)
screenOutput=${screenOutput%$'\r'}