mongoose要在schema里增加键 用Schema#add和直接在原来的schema里加有什么区别?
之前想要加一个键都是直接加的 再运行也没什么问题 刚刚看api发现有个Schema#add方法 http://mongoosejs.com/docs/api.html#schema_Schema-add 请问用这个和直接加有什么区别么?
5 回复
楼主的直接加是什么意思。Mongoose进行增删改查的字段都需要在Schema的限制范围内,不在Schema中定义的字段是不生效的 add方法就是动态修改Schema的一个方法。
@kenticny 比如说我之前定义一个Schema
var Account = new Schema({
username: String,
password: String
});
运行一段时间后 我想添加一个Email键 我之前是直接改成
var Account = new Schema({
username: String,
password: String,
Email: String
});
然后重启运行后没有什么问题,修改之前创建的用户我读取Email值就是undefined,不会出什么错 现在看了api后发现应该用schema#add方法,那我原来那样直接改到底行不行,这两种方法有什么区别呢
add方法是为了方便动态创建Schema的,对于确定的Schema直接改就是了
@insideyiqi Schema构造方法实际上调用了add方法。
function Schema (obj, options) {
if (!(this instanceof Schema))
return new Schema(obj, options);
// ...
if (obj) {
this.add(obj); // 这里调用了add方法
}
// ensure the documents get an auto _id unless disabled
var auto_id = !this.paths['_id'] && (!this.options.noId && this.options._id);
if (auto_id) {
this.add({ _id: {type: Schema.ObjectId, auto: true} });
}
// ...
}
@insideyiqi 比如你一次性save 100个文档,字段都为a,b,c,前50个文档只保存a,b 后50个文档保存a,b,c,那么肯定就需要去动态的修改Schema,而不能直接修改Schema 貌似这个例子没啥意义啊-.-!,只是想说add是一个动态的方法