MongoDB options
몽고디비 crud 를 하다가 자주 마주친 { lean: true, new: true, upsert: true } 옵션들 자세히 공부해보쟈~~~
1. lean
디폴트 값으로 MongoDB 쿼리는 Mongoose Document class를 반환한다. 일반 바닐라 자바스크립트 objects 보다 훨씬 무겁다. 몽구스 도큐먼트 클래스는 아주 많은 change tracking 의 internal 상태를 가지고 있기 때문이다. { lean: true } 옵션값을 넣어주게 되면 몽고스에게 POJO (Plain Old JavaScript Object) 를 달라고 말하게 된다. mySQL의 { raw : true } 와 비슷하다.
lean() 옵션을 준 return 값의 사이즈는 = 36, 그렇지 않았을 경우 = 600 이 나온다.
lean option의 단점은 아래 기능의 부재이다.
1. change tracking
2. casting and validation
3. getters and setters
4. virtuals
5. save()
2. new
findAndModify() : 수정(업데이트) 후 하나의 도큐먼트를 반환한다. 디폴트 값으로 반환되는 도큐먼트는 업데이트된 수정사항을 포함하지 않고 반드시 { new : true } 옵션을 넣어주어야 수정한 값을 반환해준다.
mongoose 의 경우 매서드는 -> findOneAndUpdate()
const options = { new : true }; // <- 이렇게 해주어야 수정 후의 값이 반환됨
findOneAndUpdate( { filter }, { update }, { options } );
* 수정한 후 수정된 결과를 가져오고 싶다면 updateOne대신 findAndModify를 쓰기 ! (updateOne는 아래처럼 반환됨)
export interface IUpdateOneReturn {
acknowledged: boolean;
modifiedCount: number;
upsertedId: any;
upsertedCount: number;
matchedCount: number;
}
3. upsert
upsert = update or insert : 수정할 대상이 없다면 insert를 하라는 매서드
updateOne, updateMany, replaceOne() 메서드의 옵션으로 { upsert: true }를 주면 된다.
* replaceOne() 은 통째로 다른 것으로 대체하는 매서드로 $set을 안썼을 때와 유사하다.
References:
https://mongoosejs.com/docs/tutorials/lean.html
https://www.zerocho.com/category/MongoDB/post/579e2821c097d015000404dc
'mongoDB' 카테고리의 다른 글
[MongoDB] Replica set이란? (0) | 2021.11.19 |
---|---|
[MongoDB] Mongoose Query 총 정리 (0) | 2021.11.15 |
[DB] MongoDB Index 개념과 설계 전략 (0) | 2021.11.12 |
[MongoDB] DAS, NAS, SAN, HDD, SSD, 인덱스란? (0) | 2021.11.11 |
[MongoDB] Node.js express CRUD with mongoDB (2) | 2021.09.28 |