node.js - 如何在nodejs中循环事务
问题描述
我正在尝试使用 Fawn npm 模块在 mongoodb 中进行交易。我已经编写了下面的代码,它工作正常。但是如果 item 是一个有多个元素的数组,我该如何执行相同的操作。在这种情况下,我只需要保存一次订单,但需要多次更新库存。
我试图循环,但订单被保存了两次,我得到的错误是MongoError: E11000 duplicate key error collection: db.orders index
因为我多次保存同一个订单。
try {
new Fawn.Task()
.save('orders', order)
.update(
'items',
{ _id: item[0]._id },
{ $inc: { stock: -+req.body.quantity[0] } }
)
.run();
} catch (ex) {
res.status(500).send('Something failed');
}
其中 item 是我必须更新的所有项目 ID 的列表。
我想根据项目数组的大小多次更新订单和其他项目。
当我这样做时,它工作得非常好。但我希望它是动态的,因为我不知道数组的大小。
解决方案
您可以有条件地链接它,如下所示:
try {
let task = new Fawn.Task()
//
task = task.save('orders', order)
//
for (let i in item) {
task = task.update(
'items', {
_id: item[i]._id
}, {
$inc: {
stock: - +req.body.quantity[i]
}
}
)
}
task.run();
} catch (ex) {
res.status(500).send('Something failed');
}
您可能想要添加验证。
推荐阅读
- python - SQLAlchemy 查询未迭代查询的所有结果
- c# - 如何将复杂对象作为 $http 参数传递并在 API 控制器操作中作为视图模型接收
- android - 如何检测 Android WebRTC 曲目结束
- sql - SQL 命令未正确结束 VBA 中的 SELECT 语句
- verilog - 在verilog中添加两个值任务
- xcode - 从 bash 获取一个 xcode 项目的 bundle id
- python-2.7 - 将结果输出到文件时如何解决“ValueError: I/O operation on closed file”?
- python - 为什么我的变量“let”打印的是 b 而不是 a?
- c# - 将数组插入sql数据库
- elasticsearch - 我想对 NER 使用弹性搜索