Mongoose Schema安全领域

jvi*_*tti 10 mongoose

简短明了:有没有办法阻止设置架构字段但允许获取值?

我一直在Mongoose文档附近,但找不到我正在寻找的东西.

Jas*_*ust 16

如果要设置永远不能更改的默认值,请另外选择:

var schema = new Schema({
  securedField: {
    type: String,
    default: 'Forever',
    set: function (val) { return this.securedField; }
});
Run Code Online (Sandbox Code Playgroud)

  • @jfrobishow这是由于Mongoose 5中的更改,其中查询设置器中的“ this”(在您的情况下为“ findByIdAndUpdate”)是指查询而不是文档。请参阅文档中的[set](http://mongoosejs.com/docs/api.html#schematype_SchemaType-set)的最后一部分。 (2认同)

Joh*_*yHK 4

将字段定义为虚拟getter,而不是传统字段。

例如,假设您希望pop在通过 Mongoose 访问时将集合字段设置为只读:

var schema = new Schema({
    city: String,
    state: String
});

schema.virtual('pop').get(function() {
    return this._doc.pop;
});
Run Code Online (Sandbox Code Playgroud)

通过访问_doc模型实例的私有成员,将来可能会中断,但是当我刚才测试它时,效果很好。