본문 바로가기

mongoDB

[MongoDB] options - lean, new, upsert

반응형

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

 

Mongoose v6.0.12: Mongoose Tutorials: Faster Mongoose Queries With Lean

The lean option tells Mongoose to skip hydrating the result documents. This makes queries faster and less memory intensive, but the result documents are plain old JavaScript objects (POJOs), not Mongoose documents. In this tutorial, you'll learn more about

mongoosejs.com

https://www.zerocho.com/category/MongoDB/post/579e2821c097d015000404dc

 

(MongoDB) 수정(Update,Upsert 또는 Modify)

안녕하세요. 이번 시간에는 몽고DB CRUD 기능 중 U를 담당하는 Update 메소드들에 대해서 알아보겠습니다. 일단 수정을 하려면 수정할 대상을 선택해야 합니다. 그러고나서 이제 어떻게 수정할 지를

www.zerocho.com

 

반응형