-
카테고리
-
세부 분야
풀스택
-
해결 여부
미해결
inserted_id 로 db에 값이 insert되었는지 확인 가능한데 update시에는 어떻게 확인 가능할까요?
22.11.23 02:54 작성 조회수 225
0
어느 영상인지 잘 기억은 안나는데
insert 내용을 x 로 받아서
inserted_id 로 인서트가 잘되었는지 확인 하는 내용이 있었습니다.
x.inserted_id 이런식으로요
갑자기 update할때는 inserted_id 처럼 업데이트 되었는지 확인할수 있는 방법이 있는지
너무 궁금해져서 구글에 찾아보니, 딱히 방법이 보이지 않는데,
혹시 확인할수있는 방법이 있는지 궁금해서 선생님께 문의드립니다.
답변을 작성해보세요.
1
남박사
지식공유자2022.11.23
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를 하기 때문에 이점을 참고하셔야 할듯 합니다.
답변 1