我正在使用mongodb和nodejs,我的用例是这样的,
当用户购买其分数存储在用户文档中的产品时,我需要更新产品文档以减少其库存,然后需要减少用户文档中用户的分数,然后需要创建一个交易记录。这里涉及到三个集合,我应该在嵌套的promise结构中执行3次findOne和Save()吗?
或者还有其他更有效的方法吗?
我目前正在使用 mongoese,我应该切换到 mongodb 官方客户端吗?
Collection1.findOne( doc1 => {
doc1.save().then({
Collection2.findOne( doc2 => {
doc1.save().then({
Collection3.findOne( doc3 => {
doc1.save().then({
})
})
})
})
})
})
最佳答案
正如 @Raj Kumar 的回答一样,您应该使用异步函数,但我想添加使用 Promise.all
而不是单独等待每个请求。最终的代码是
async function purchase() {
try {
let promise1 = Collection1.findOneAndUpdate(
condition,
update
);
let promise2 = Collection2.findOneAndUpdate(
condition,
update
);
let promie3 = Collection3.findOneAndUpdate(
condition,
update
);
let result = await Promise.all([promise1, promise2, promise3])
} catch(err) {
// handle error in any promise
}
}
关于node.js - 如何高效/高性能地对多个集合进行多次查找和更新?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53993994/