Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js mongoose模式中的常量属性值_Node.js_Mongoose - Fatal编程技术网

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]}
我最近为此编写了一个插件: