我在和羽毛兽和mongoose 合作.
new Schema({
status: { type: Number, enum: [0, 1, 2, 3], default: 0 },
});
但是,当我在"status"字段中添加$inc时,它不关心枚举,我可以根据需要多次添加$inc,并将状态设置为100000.
我不知道是因为羽毛还是别的原因
谢谢
我在和羽毛兽和mongoose 合作.
new Schema({
status: { type: Number, enum: [0, 1, 2, 3], default: 0 },
});
但是,当我在"status"字段中添加$inc时,它不关心枚举,我可以根据需要多次添加$inc,并将状态设置为100000.
我不知道是因为羽毛还是别的原因
谢谢
这是文件中规定的"按预期工作":
enum:Array,创建一个验证器,用于判断该值是否严格等于给定数组中的一个值.
enum
只创建了一个mongoose
验证程序,is:
验证是中间件.默认情况下,Mongoose将验证注册 for each 模式上的pre('save')钩子.
理论上,你应该用他们的update validators来做这个,但是他们不支持$inc
,而且他们的行为有时也不太清楚.
我个人建议不要使用mongoose
,这是一个只会增加错误和混乱的黑盒.特别是当涉及到他们的"验证器"时,它们不是"真正的"验证器.
那么你能做些什么来解决这个问题呢?
最简单的解决方案是只在代码中执行,首先找到对象,如果它符合标准,然后执行$inc
,显然这不会给出实际的验证,并且只在您要实现它的地方受支持,如果您在代码中有许多地方可以进行这样的更新,这也不是最优的.
使用mongodb validation,这是"真正的"验证,实际上在db级别进行验证.例如,您可以创建自己的Collection :
db.createCollection('collection_name', {
validator: {
$jsonSchema: {
bsonType: 'object',
properties: {
status: {
bsonType: 'int',
enum: [0, 1, 2, 3],
description: 'must be a valid status integer',
},
},
},
},
validationAction: 'error',
});
现在,任何具有无效值的更新都将失败.