gpt4 book ai didi

mongodb - Mongoose 循环遍历 findOneAndUpdate 条件语句

转载 作者:可可西里 更新时间:2023-11-01 10:19:28 31 4
gpt4 key购买 nike

我想知道这部分代码是否可以用不同的方式编写,仅使用模型的 Mongoose 辅助方法?如果没有股票大于 0,我可以返回成功和错误吗?

ProductSchema.statics.substractStock = function (products) {
_.map(products, updateStock)
function updateStock(o) {
mongoose.model('Product').findById(o._id, function (err, product) {
return product
}).then(function(productDB){
if(productDB.stock > o.stock && productDB.stock > 0){
mongoose.model('Product').findOneAndUpdate(o._id, {$inc: {stock: -(o.stock)}}, {},
function (err, doc) {
//return success ??
}
);
} else {
//return 'no update'
}
});
}
};

最佳答案

这可以通过原子更新来完成,您可以在其中放弃初始的 findById() 调用并包含比较逻辑

if (productDB.stock > o.stock && productDB.stock > 0) { ... }

在如下查询中:

function updateStock(o) {
mongoose.model('Product').findOneAndUpdate(
{
"_id": o._id,
"$and": [
{ "stock": { "$gt": o.stock } } ,
{ "stock": { "$gt": 0 } }
]
},
{ "$inc": { "stock": -(o.stock) } },
{ "new": true }, // <-- returns modified document
function (err, doc) {
// check whether there was an update
}
);
}

关于mongodb - Mongoose 循环遍历 findOneAndUpdate 条件语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40645903/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com