我有一个这样声明的字段
storeCreditD: {
storeCredit: {
type: Number,
default: 0,
min: [0, 'credit cannot be negative']
},
storeDeposit: {
type: Number,
default: 0,
min: [0, 'deposit cannot be negative']
}
}
这是我要更改模型
const store = await Store.findOneAndUpdate(
{ _id: storeId },
{ $inc: { 'storeCreditD.storeCredit': credit,
'storeCreditD.storeDeposit': credit } },
{ new: true }
现在,当我尝试以负面信用进行尝试时(示例)
const credit = -60
我希望猫鼬验证器会抛出错误,因为它试图将两个字段都保存为负值。
令我惊讶的是,未引发任何错误,并且保存了负值。 我在做什么错了?
答案 0 :(得分:1)
Validator只是一个middleware,它将在您尝试在架构上使用.save()
方法时检查条件。还有一些用于更新的特殊验证器(描述为here),但不幸的是,它们不支持$inc
操作,因为这些操作是在数据库中执行的(猫鼬之外)。
您可能需要采取的一种变通方法是修改find()
条件以包括最低限度的信用额度:
let credit = -60;
let minStoreCredit = Math.abs(credit);
const store = await Store.findOneAndUpdate(
{ storeId: storeId, 'storeCreditD.storeCredit': { $gte: minStoreCredit } },
{ $inc: { 'storeCreditD.storeCredit': credit } },
{ new: true });
console.log(store);
在这种情况下,如果功劳少于null
,您将得到60
或更新结果。