mongoose要在schema里增加键 用Schema#add和直接在原来的schema里加有什么区别?
发布于 10 年前 作者 insideyiqi 9274 次浏览 最后一次编辑是 8 年前

之前想要加一个键都是直接加的 再运行也没什么问题 刚刚看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是一个动态的方法

回到顶部