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(): 하나의 문서를 원자적으로 변경(수정, 대체, 삭제)하고 반환한다.
'데이터베이스 > MongoDB' 카테고리의 다른 글
[MongoDB] Delete관련, 차이점 (0) | 2023.03.01 |
---|---|
[Mongoose] Update관련, 차이점 (0) | 2023.02.28 |
[MongoDB] Deprecated Methods (지원중단 메소드) (0) | 2023.02.28 |
[Mongoose] Create관련, 차이점 (0) | 2023.02.27 |
[MongoDB] Create관련, 차이점 (0) | 2023.02.27 |
댓글