Mongoose - 重新定义模式结构

时间:2016-03-05 20:35:59

标签: node.js mongodb mongoose

我有以下代码:

var Schema = mongoose.Schema;

var personSchema = new Schema({
    firstname: String,
    lastname: String,
    address: String,
});

var Person = mongoose.model('humans', personSchema);

var john = Person({ //will turn into a new object.
    firstname: "john",
    lastname: "doe",
    address: "somewhere",

});

//save the user
john.save(function(err){
   if(err) throw err;
   console.log('person saved!'); 
});

现在,在我的数据库中,我有一个名为human with的集合         名字:“约翰”,         姓氏:“doe”,         地址:“某处”, 正如你在上面看到的那样。我的问题是:在人类集合中是否有一种方法,将有一个文档具有您在上面看到的结构,另一个具有一些新字段:

firstname: String,
lastname: String,
address: String,
car: String,
office: String

我尝试了几种方法来重新定义personSchema的结构 但它总是给我同样的错误,编译后不能覆盖模型。“

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

发生错误是因为您已经定义了架构,然后再次定义架构。实例化一次模式,并使make Global对象访问模式。

更改您的个人架构,并添加新字段

var personSchema = new Schema({
    firstname: String,
    lastname: String,
    address: String,
    car: String,
    office: String
});

填充后不包含添加字段的文档将具有此键但具有未定义的值。

为了不忽略新属性,您可以解除模式

var personSchema = new Schema({
        firstname: String,
        lastname: String,
        address: String,
        car: String,
        office: String
    }, {strict: false});

您也可以使用混合类型将任何内容设置为属性

var personSchema = new Schema({
            firstname: String,
            lastname: String,
            additional: Mixed
        });

并在其他字段中设置其他属性。