Mongoose 모델의 강점
Mongoose는 ODM으로 , 스키마 구성 -> 모델 구성 후에 모델을 이용하여 MongoDB에 데이터를 CRUD 작업 할 수 있다.
MongoDB는 NoSQL로 스키마 등의 제한이 없다는 굉장한 장점이 있었는데, Mongoose는 왜 다시 스키마를 불러왔는가 ?
스키마와, 모델의 구성을 가져왔으나 제한은 가져오지 않았다는 것이 굉장한 장점이다.
즉, 장점은 가져오되 제한점은 가져오지 않은 것이다.
스키마-모델을 통하여 컬렉션에 들어가는 데이터(MongoDB에서는 도큐먼트, 즉 문서라고 함) 들의 통일성을 줄 수 있다.
그러나 스키마를 반드시 따라서 집어넣어야 하는 제한은 없다.
예를 들어 Person이라는 스키마를 만들자.
1 2 3 4 5 6 7 8 | var personSchema = new Schema({ name : {type:String, required:true}, age : {type:Number, default:1}, address : String, idNumber : {type:Number, required:true, unique:true} }); var Person = mongoose.model('people', personSchema); | cs |
위와 같은 식으로 만든 이후에, 새로운 모델을 만드는데, 이 방식이 클래스 인스턴스(오브젝트)를 만드는 과정과 굉장히 유사하며,
실제로도 만든 모델을 오브젝트처럼 자유롭게 사용할 수 있다는 굉장한 장점이 있다.
위의 경우에 이름과, idNumber만 required이므로, 나머지 정보는 입력하지 않아도 된다.
age는 기본이 1로 들어가고, 주소는 입력하지 않으면 undefined 상태로 있다.
idNumber는 unique한 값을 갖고 있다. 즉 값이 겹치면 안된다.
이런 식으로 모델을 자기 자신의 방식으로 커스터마이즈하는 것이 굉장히 간편하다.
또한 Person으로 객체를 만들고, 그 객체를 저장하고 수정하는 것이 굉장히 간단하다.
1 2 3 | var YangD = new Person({name:"YangD", age:25, idNumber:1234}); YangD.address = "포항"; | cs |
위와 같은 식으로 모델을 통해 만든 도큐먼트는 객체이며, 객체처럼 똑같이 사용이 가능하다.
앞으로 작성할 Subdocument, Array 값 등등을 집어 넣고 쓰는 것을 보면 얼마나 편리한 기능인지 알 수 있을 것이다.