API 호출이 두 개의 개별 콜렉션을 업데이트해야하는 경우가 있습니다. 하나의 업데이트가 실패하면 첫 번째 업데이트를 되돌려 야합니다. 두 작업 중 하나가 성공적으로 완료되었는지 또는 전혀 완료되지 않았는지 확인하려면 어떻게합니까? 명확히하기 위해 여기 상황이 있습니다. 익스프레스 프레임 워크에서 MongoJS 사용하기.MongoDB 다중 콜렉션 업데이트
질문 모델
{
_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
}
접근 1 : 먼저 요청에서 전송 id
에 해당하는 답을 당깁니다. 수락 된 것으로 표시하고 qid
을받습니다. qid
에 해당하는 질문 문서에 answer id
을 삽입하십시오. 두 번째 작업이 실패하면 첫 번째 작업으로 되돌립니다. 그러나 db 연결이 끊어지면 수행 할 수 없습니다.
접근법 2 먼저 qid
에 해당하는 질문을 받으십시오. accepted
필드를 answer id
으로 업데이트 한 다음 이에 해당하는 답변을 받아 승인 된 것으로 표시하십시오.
그렇다면 한 가지 대답을 수락하면 다른 모든 대답을 수락하지 말아야합니다. 그것은 세 번째로입니다. 게다가 그것은 토글 연산이기 때문에 이미 받아 들여 졌다면 그 반대를 할 필요가있다.
이 상황을 처리하기위한 더 깨끗하고 안전한 방법이 있다는 느낌이 들었습니다.
임베딩에 문제가 있습니다. 그것은 연속적으로 답장을 줄 것입니다. 회신에 대한 업데이트를 수행하는 것은 불가능 해집니다. – Nil
음 ... 답변 및 질문과 같이 답변 및 질문/답변을 동시에 업데이트 하시겠습니까? 그렇지 않다면, 아마도 별도의 콜렉션에 응답을 가지고 있고 단지 응답의'_id' 배열을 가지고있을 수 있습니까? – tfogo