使用修复更新:有没有办法循环一个对象并在每次迭代时保存/更新一个 mongodb 文档而不会获得 ParallelSav



我想在每个循环中更新mongodb文档,但似乎不起作用。我使用地图循环访问对象并得到一个

并行保存

错误:无法并行多次保存同一文档

所以现在使用 async.each 循环访问对象,但似乎猫鼬只保存一次。下面的代码

const openTrade = await TradeModel.find({
$and: [{ isOpen: true }, { price: { $lte: price } }]
})
.sort("volume")
.where({ userId: { $ne: req.authUser._id } });
trade = async openTrade => {
const buyerInfo = await UserModel.findById(req.authUser._id);
const buyerWallet = await WalletModel.findById(buyerInfo.walletId);
const sellerInfo = await UserModel.findById(openTrade.userId);
const sellerWallet = await WalletModel.findById(sellerInfo.walletId);
buyerWallet.balance = parseInt(buyerWallet.balance) - amountToPay;
sellerWallet.balance = parseInt(sellerWallet.balance) + amountToPay;
await Promise.all([sellerWallet.save(), buyerWallet.save()]);
};
async.forEachOf(openTrade, trade);

所以我终于找到了问题所在。我没有使买家信息,卖家信息和钱包变量不变。所以现在它起作用了。谢谢

您可以尝试如下: 根据MongoDB更新 如果文档包含_id字段,则 save(( 方法等效于将 upsert 选项设置为 true 且查询谓词位于_id字段上的更新。

const openTrade = await TradeModel.find({$and:[{isOpen : true}, {price : {$lte : price}}]}).sort('volume').where({userId : {$ne : req.authUser._id } })
trade = async (openTrade)=>{
buyerInfo = await UserModel.findById(req.authUser._id)
buyerWallet = await WalletModel.findById(buyerInfo.walletId)
sellerInfo = await UserModel.findById(openTrade.userId)
sellerWallet = await WalletModel.findById(sellerInfo.walletId)
delete buyerWallet._id;
delete sellerWallet._id;
buyerWallet.balance = parseInt(buyerWallet.balance) - amountToPay
sellerWallet.balance = parseInt(sellerWallet.balance) + amountToPay  
await Promise.all([sellerWallet.save(), buyerWallet.save()])
}
async.forEachOf(openTrade, trade)

最新更新