测试数据
{
"products": [{
"status": "NEW",
"total_price": 95.0,
"count": 1.0,
"is_vip_channel": true,
"price": 95.0,
"product_code": "PROD001"
}, {
"status": "NEW",
"total_price": 48.0,
"count": 4.0,
"is_vip_channel": false,
"price": 12.0,
"product_code": "PROD002"
}, {
"status": "NEW",
"total_price": 86.0,
"count": 2.0,
"is_vip_channel": true,
"price": 43.0,
"product_code": "PROD003"
}],
"userInfo": {
"appId": "admin",
"openId": "10007"
}
}
需求:商品代码为 PROD001、PROD002的商品状态更新为DONE。
业务代码:
exports.main = async (event, context) => {
const productCodes = ["PROD001","PROD002"]
try{
productCodes.forEach((item,index)=>{
sysCart.where({
"userInfo.openId": _.eq("10007"),
products: _.elemMatch({product_code: item})
}).update({
data: {
"products.$.status": "DONE"
}
})
})
return "OK"
}catch(e){
return "NO"
}
}
我的问题是这种在云函数中使用遍历对数据库操作的方式,是不是原子性的,需要保证两次调用要么都成功或者都失败,需不需要加事务。
或者针对这种需求,有没有更好的设计思路
如果你要保证两次数据库操作成功,需要加事务。