我有一个情境,其中一个API调用需要更新两个不同的集合。如果其中一个更新失败,我需要回滚第一个更新。我如何确保两个操作都成功完成或全部失败?为了更好地理解情况,在express框架中使用MongoJS。
然后,有一种情况是如果有一个答案被接受了,我们需要将所有其他答案都设为未接受。这是第三个操作。此外,它是一个切换操作,因此如果已经被接受,我们需要执行反向操作。
我感觉有一种更干净、更安全的处理这种情况的方式。
问题模型
{
_id: ObjectId(),
title: String,
description: String,
accepted: String,
// Some other fields
}
答案模型
{
_id: ObjectId(),
qid: String, //ObjectId of question its linked to
body: String,
accepted: boolean,
// Some other fields
}
方法一:
首先,从请求中获取与id
对应的答案。将其标记为已接受并获取qid
。将answer id
插入到相应的qid
对应的问题文档中。如果第二个操作失败,则恢复第一个操作。但是如果数据库连接丢失,则无法执行此操作。
方法二:
首先,获取与qid
对应的问题。使用answer id
更新accepted
字段,然后获取对应的答案并将其标记为已接受。然后,有一种情况是如果有一个答案被接受了,我们需要将所有其他答案都设为未接受。这是第三个操作。此外,它是一个切换操作,因此如果已经被接受,我们需要执行反向操作。
我感觉有一种更干净、更安全的处理这种情况的方式。