본문 바로가기
데이터베이스/MongoDB

[MongoDB] Update관련, 차이점

by minhyeok.lee 2023. 2. 28.
반응형

update() vs replace() vs modify()

 

Update관련

MongoDB: db.collection.update(): 지원중지, db.collection.updateOne(), db.collection.updateMany(), db.collection.findOneAndUpdate(),

db.collection.findOneAndReplace(), db.collection.replaceOne(), db.collection.findAndModify()

 

 

updateOne() vs updateMany()

db.collection.updateOne(): 필터를 기반으로 컬렉션 내의 하나의 문서를 수정한다.

db.collection.updateMany(): 필터를 기반으로 컬렉션 내의 여러 문서를 수정한다.

 

 

updateOne() vs finOneAndUpdate()

db.collection.updateOne()

하나의 문서를 찾아 업데이트하고 문서를 반환하지 않는다. 

 - upsert옵션이 false인 경우 일치하는 문서의 갯수, 수정된 문서의 갯수(1)이 반환된다.

 - upsert옵션이 true인 경우 없을 경우 새 문서를 생성하고 _id만 반환한다.

 

db.collection.findOneAndUpdate()

하나의 문서를 찾아 업데이트하고 반환 값으로 문서를 반환한다.

 - upsert옵션이 false인 경우 find하기 위한 query개체를 다시 반환한다.

 - upsert옵션이 true인 경우 없을 경우 새 문서를 생성하고 null을 반환한다.

 - 기본적으로 원본 문서(수정 전 문서)를 반환한다.

 - returnNewDocument 옵션이 true로 설정되거나 returnDocument옵션이 after로 설정되었다면 수정된 문서를 반환한다.

 - 찾는 문서가 없을 경우 find하기 위한 query개체를 다시 반환한다.

 

공통점: 하나의 문서를 찾아 업데이트하는 것은 동일하다.

차이점: 

1. 여러 사례에 대한 반환 값(return 되는 값)이 다르다.

2. updateOne의 사용 사례는 문서가 필요하지 않고 약간의 시간과 자원(대역폭)을 절약하려는 경우이다.

 

 

update() vs replace() vs modify()

update()

 - 삭제 또는 대체 등은 없고 수정만 허용한다. 

 - update()은 필드를 수정할 수 있다.

 - update()을 사용하면 이전 문서의 필드를 잃지 않고 새 필드를 추가할 수 있다.

 

replace()

 - 문서를 대체 한다. (문서 전체를 바꾼다)

 - 문서 전체를 대체하므로, 새 문서에 포함되지 않은 이전 문서의 필드는 손실된다.

 

modify()

 - 수정, 대체, 삭제 등을 포함하여 더 많은 작업을 수행할 수 있다.

 - 업데이트, 삭제, 대체 세 가지 DML 작업 기능을 결합한다.

 - 단점은 세 가지 DML 연산을 결합하기 때문에 정확하게 오류가 발생하기 쉽다는 것이다.

 - Modify()의 문제를 해결하기 위해 셸 버전 3.2에서 도입된 세 가지 최신 방법으로 수정: FindOneAndUpdate(), 대체: FindOneAndReplace(), 삭제: FindOneAndDelete()로 분리했다.

유사점:  하나와 일치할 수 있다면 셋 다 단일 문서에서 작동하고 변경된 문서를 반환한다.

 

 

차이점

db.collection.updateOne(): 필터를 기반으로 컬렉션 내의 하나의 문서를 수정한다.

db.collection.updateMany(): 필터를 기반으로 컬렉션 내의  여러 문서를 수정한다.

db.collection.findOneAndUpdate(): 하나의 문서를 찾아서 수정한다.

db.collection.findOneAndReplace(): 하나의 문서를 찾아서 대체한다.

db.collection.replaceOne(): 컬렉션의 하나의 문서를 대체한다.

db.collection.findAndModify(): 하나의 문서를 원자적으로 변경(수정, 대체, 삭제)하고 반환한다.

반응형

댓글