10

简洁明了:有什么方法可以防止设置模式字段但允许获取值?

我一直在Mongoose 文档中,但找不到我要找的东西。

4

4 回答 4

16

如果您想设置一个永远不能更改的默认值,则另一种选择:

var schema = new Schema({
  securedField: {
    type: String,
    default: 'Forever',
    set: function (val) { return this.securedField; }
});
于 2015-04-02T20:38:32.627 回答
3

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

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

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

schema.virtual('pop').get(function() {
    return this._doc.pop;
});

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

于 2012-11-26T14:33:12.830 回答
2

从 mongoose 5.6 开始,您可以执行以下操作:immutable: true

var schema = new Schema({
  securedField: {
    type: String,
    default: 'Forever',
    immutable: true
  }
});
于 2019-12-10T04:34:24.983 回答
0

您可以从设置中返回与默认值相同的值,无需参考 _this 文档:

var schema = new Schema({
  securedField: {
    type: String,
    default: 'Forever',
    set: () => 'Forever'
});
于 2018-11-28T09:28:43.927 回答