• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

inserted_id 로 db에 값이 insert되었는지 확인 가능한데 update시에는 어떻게 확인 가능할까요?

22.11.23 02:54 작성 조회수 213

0

어느 영상인지 잘 기억은 안나는데

insert 내용을 x 로 받아서

inserted_id 로 인서트가 잘되었는지 확인 하는 내용이 있었습니다.

x.inserted_id 이런식으로요

 

 

갑자기 update할때는 inserted_id 처럼 업데이트 되었는지 확인할수 있는 방법이 있는지

너무 궁금해져서 구글에 찾아보니, 딱히 방법이 보이지 않는데,

혹시 확인할수있는 방법이 있는지 궁금해서 선생님께 문의드립니다.

 

답변 1

답변을 작성해보세요.

1

insert는 1개의 쿼리에 1개의 데이터가 1:1로 저장되는 형식인데 반해 update의 기능을 생각해보면 update는 쿼리 1개의 대상이 1개가 될 수 있고 다수 개가 될 수도 있습니다. 그렇기 때문에 기본적으로는 insert처럼 inserted_id 같은 id값을 반환하지 않습니다.

 

https://www.mongodb.com/docs/manual/reference/method/db.collection.update/#returns

위 링크는 몽고DB공식 문서의 내용인데 내용을 보면 update 함수는 WriteResult 객체를 반환한다 되어있고 WriteResult를 다시 살펴보면

WriteResult({
   "nMatched" : 1,
   "nUpserted" : 0,
   "nModified" : 1,
   "writeConcernError": {
     "code" : 64,
     "errmsg" : "waiting for replication timed out",
     "errInfo" : {
       "wtimeout" : true,
       "writeConcern" : {
         "w" : "majority",
         "wtimeout" : 100,
         "provenance" : "getLastErrorDefaults"
       }
   }
})

 

위와 같은 형식으로 생긴것을 확인 할 수 있습니다. 그래서 update후에는 nMatched값이나 nModified값을 통해 몇개의 데이터가 적용되었는지 정도를 확인 할 수 있습니다.

업데이트 후 반드시 id값을 통해 데이터의 수정 여부를 확인해야 한다면 테스트 해보진 않았지만 updateOne(), updateMany()함수에서 upsert옵션을 사용하여 반환된 값에서 upserted_id를 통해 확인이 가능할 것 같긴한데 upsert 옵션은 쿼리의 대상이 없으면 insert를 하기 때문에 이점을 참고하셔야 할듯 합니다.