【发布时间】:2012-11-13 08:37:06
【问题描述】:
简明扼要:有什么方法可以阻止设置架构字段但允许获取值?
我一直在Mongoose Documentation 附近,但找不到我要找的东西。
【问题讨论】:
标签: mongoose
简明扼要:有什么方法可以阻止设置架构字段但允许获取值?
我一直在Mongoose Documentation 附近,但找不到我要找的东西。
【问题讨论】:
标签: mongoose
从 mongoose 5.6 开始你可以这样做:immutable: true
var schema = new Schema({
securedField: {
type: String,
default: 'Forever',
immutable: true
}
});
【讨论】:
你可以从设置中返回与默认值相同的值,无需参考_this文档:
var schema = new Schema({
securedField: {
type: String,
default: 'Forever',
set: () => 'Forever'
});
【讨论】:
如果您想设置一个永远不能更改的默认值,另一种选择:
var schema = new Schema({
securedField: {
type: String,
default: 'Forever',
set: function (val) { return this.securedField; }
});
【讨论】:
this 在设置器中的查询(findByIdAndUpdate 在您的情况下)指的是查询而不是文档。请参阅set 文档中的最后一点。
将字段定义为virtual getter,而不是传统字段。
例如,假设您想在通过 Mongoose 访问时将集合的 pop 字段设为只读:
var schema = new Schema({
city: String,
state: String
});
schema.virtual('pop').get(function() {
return this._doc.pop;
});
通过访问模型实例的私有 _doc 成员,这可能会在将来中断,但是当我刚刚测试它时它运行良好。
【讨论】:
pop 字段已经存在,它可以工作,因为原始文档可通过(未记录的)_doc 字段获得。