node.js - 如何高效/高性能地对多个集合进行多次查找和更新?

标签 node.js mongodb mongoose e-commerce

我正在使用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/

相关文章:

node.js - 服务器重启后 PM2 不会启动我的 nodejs 应用程序

javascript - 如何在 MongoDB 中检索子文档引用

java.lang.IllegalArgumentException : Invalid reference performing aggregation in MongoDB 异常

node.js - Mongoose 仅​​返回文档嵌套数组中的一个元素

javascript - 无法在 Javascript 中检索对象属性

javascript - 查询后在 mongoose 对象中设置属性

javascript - l20n:服务器端 Node resolveValues错误

javascript - 正则表达式

javascript - 无法在客户端访问 cookie | NodeJS 和 JS

MongoDb 在 NestJs 中的变更流