Node.js mongoose模式中的常量属性值
我有一个模式,其中Node.js mongoose模式中的常量属性值,node.js,mongoose,Node.js,Mongoose,我有一个模式,其中a属性总是等于1。我找到了解决方案,但我不喜欢: var schema = new Schema({ a: Number }); schema.pre('save', function(){ this.a = 1; }); 你能告诉我有没有更好的办法吗?例如: var schema = new Schema({ a: 1 }); 使用默认值怎么样?它是否达到了您的要求 var模式=新模式({ a:{type:Number,默认值:1} }); 如果
a
属性总是等于1。我找到了解决方案,但我不喜欢:
var schema = new Schema({
a: Number
});
schema.pre('save', function(){
this.a = 1;
});
你能告诉我有没有更好的办法吗?例如:
var schema = new Schema({
a: 1
});
使用默认值怎么样?它是否达到了您的要求
var模式=新模式({
a:{type:Number,默认值:1}
});代码>
如果要强制执行,最好的选择是pre
版本。另一种方法是使用。Virtuals是可以获取和设置的文档属性,但不能持久化到MongoDB。相反,您可以指定一个getter函数,每次访问a
属性时都会调用该函数:
schema.virtual('a').get(function () {
return 1;
});
现在,schema
的每个文档都有一个属性a
,该属性等于1
。但是请注意,由于虚拟对象不能持久化,因此您无法查询它们。将常量存储为模型属性
var mySchema = new Schema({
// ...
});
var myModel = mongoose.model('MyModel', mySchema);
myModel.a = 1;
也许太晚了,但对于将来,您可以使用默认值和始终返回旧值的自定义setter,例如
var模式=新模式({
a:{
类型:数字,
默认值:1,
设置(值){
归还这个;
},
}
});
default
选项将初始化字段,自定义设置程序将忽略任何新值,并始终将字段重置为以前的值(您使用默认值设置)。谢谢。我也想过这个版本,但我想强迫它。无论如何,我认为你的答案对我来说已经足够了,我认为还有一个黑客解决方案可以强制执行值){type:Number,default:1,enums:[1]}
我最近为此编写了一个插件: