首页 > 解决方案 > 猫鼬中两个 .save() 的正确方法

问题描述

我试图在同一个函数中保存到两个不同的文档和两个不同的模型,但无论我尝试什么,我似乎都会遇到奇怪的错误。似乎无论出于何种原因,猫鼬都使这完全行不通。

我有两个嵌套的 findOne 函数,一个是查找书,另一个是查找教授,对象是更新它们以相互关联。

有没有推荐的方法我应该这样做,也许是两个单独的后端端点和两个单独的函数?那将是解决这个问题的一种方法,但我想知道为什么我不能做下面的事情。

await prof.save().then(async () => {
      await book
            .save()
            .then(() => {
                return res.status(200).json({
                   success: true,
                   message: 'items updated'
             }).catch( (err) => {
                 return res.status(400)
             })
      })
})

标签: node.jsreactjsexpressmongoosesave

解决方案


首先你不能await .then .catch一起使用。如果你想在 mongoose 中更新两个或更多集合,最好使用事务,就像rollback在关系数据库中一样,但是如果你是 mongoose 的新手,很难实现事务,没有事务你可以这样做


try {
 await prof.save();
 await book.save();
 return res.status(200).json({
   success: true,
   message: "items updated",
});
} catch (error) {
   return res.status(400)
}

推荐阅读