我正在使用mongodb和nodejs,我的用例是这样的,

当用户购买其分数存储在其用户文档中的产品时,我将需要更新产品文档以减少其库存,然后需要降低用户在用户文档中的分数,然后需要创建交易记录。这里涉及三个集合,我应该在嵌套的promise结构中执行3次findOne和Save()吗?

还是有其他更有效的方法呢?

我当前正在使用蒙古语,我应该改为使用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
  }
}

07-24 09:30