如何在 mongo 中保持递减值直到为 0
How to keep decreasing value in mongo until is 0
singleObj = await Objects.findByIdAndUpdate({ _id: req.body.id, }, { $inc: { 'total_obj': -1, 'total_stuff': 1 }, }, { new: true })
用户单击一个按钮,'total_obj' 的值减一。该值不必小于 0。
我试过这样做:
singleObj = await Objects.findByIdAndUpdate(
{ _id: req.body.id, "total_obj": { "$lt": 0 } },
{ "$set": { "total_obj": 0 } }
);
但是每次我加载页面时都会出现问题,并且我将值设置为 0。
我还添加了关于模式的定义:
total_obj: {
type: Number,
required: true,
min: 0
},
我假设您的意思是您不希望您的值小于 0。
您需要使用 $gt
运算符,虽然您在第一个 findByIdAndUpdate
中正确使用 $inc
,但在第二个
中没有使用它。
此外,我们不只是在寻找 id,所以我们应该使用 findOneAndUpdate
。
singleObj = await Objects.findOneAndUpdate(
{ _id: req.body.id, "total_obj": { "$gt": 0 } },
{ $inc: { "total_obj": -1 } }
);
首先尝试获取 Objects
实例,仅当 > 0
:
时才更新值
const singleObj = await Objects.findById(req.body.id)
if (!singleObj) // Error, obj not found
if (singleObj.total_obj > 0) {
singleObj.total_obj = singleObj.total_obj-1
await singleObj.save()
} else {
// `total_obj` is already zero
}
singleObj = await Objects.findByIdAndUpdate({ _id: req.body.id, }, { $inc: { 'total_obj': -1, 'total_stuff': 1 }, }, { new: true })
用户单击一个按钮,'total_obj' 的值减一。该值不必小于 0。 我试过这样做:
singleObj = await Objects.findByIdAndUpdate(
{ _id: req.body.id, "total_obj": { "$lt": 0 } },
{ "$set": { "total_obj": 0 } }
);
但是每次我加载页面时都会出现问题,并且我将值设置为 0。 我还添加了关于模式的定义:
total_obj: {
type: Number,
required: true,
min: 0
},
我假设您的意思是您不希望您的值小于 0。
您需要使用 $gt
运算符,虽然您在第一个 findByIdAndUpdate
中正确使用 $inc
,但在第二个
此外,我们不只是在寻找 id,所以我们应该使用 findOneAndUpdate
。
singleObj = await Objects.findOneAndUpdate(
{ _id: req.body.id, "total_obj": { "$gt": 0 } },
{ $inc: { "total_obj": -1 } }
);
首先尝试获取 Objects
实例,仅当 > 0
:
const singleObj = await Objects.findById(req.body.id)
if (!singleObj) // Error, obj not found
if (singleObj.total_obj > 0) {
singleObj.total_obj = singleObj.total_obj-1
await singleObj.save()
} else {
// `total_obj` is already zero
}