Database/MongoDB

5. Mongoose 스키마, 모델 활용

양디 2016. 2. 7. 21:47





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:Numberdefault: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 값 등등을 집어 넣고 쓰는 것을 보면 얼마나 편리한 기능인지 알 수 있을 것이다.




댓글