Mongoose - 모르는 것 채워놓기
스키마의 옵션(Schema's option)
mongoose에서 스키마를 선언하는 과정에서 사용할 수 있는 옵션들이 존재한다.
- autoIndex
- bufferCommands
- capped
- collection
- emitIndexErrors
- id
- [id](#id)
- minimize
- read
- safe
- shardKey
- strict
- toJSON
- toObject
- typeKey
- validateBeforeSave
- versionKey
- collation
- skipVersioning
- timestamps
- retainKeyOrder
http://mongoosejs.com/docs/guide.html#collection
이렇게 다양한 옵션들이 존재하는데 자세한 사항은 위 URL을 참조하자.
id
몽구스에서 id는 기본적으로 도큐먼트의 _id 필드를 반환하는, 각각의 스키마에 배정되는 가상의 값이다.
_id
Population
아하! 여기 의미를 대강 추측해 볼 수 있는데, 몽구스DB에서 Population은 다른 콜렉션에 있는 도큐먼트를 참조하는 데 사용한다고 추측해 볼 수 있다. 몽구스 홈페이지에서는 다음과 같이 설명하고 있다.
Population은 다른 콜렉션으로부터 도큐먼트 안 특정 경로를 통해 그 부분을 도큐먼트로 자동으로 대체(치환)하는 과정이다.
var mongoose = require('mongoose');
var Schema = mongoose.Schema; var personSchema = Schema({ _id: Schema.Types.ObjectId, name: String, age: Number, stories: [{ type: Schema.Types.ObjectId, ref: 'Story' }] // 리스트로 받고있는 걸 집중하자. }); var storySchema = Schema({ author: { type: Schema.Types.ObjectId, ref: 'Person' }, title: String, fans: [{ type: Schema.Types.ObjectId, ref: 'Person' }] // 리스트로 받고있는 걸 집중하자. }); var Story = mongoose.model('Story', storySchema); var Person = mongoose.model('Person', personSchema);
모델을 만드는 기본 구조이다. 위에서 두 개의 스키마를 만들었는데, 하나는 사람, 다른 하나는 스토리에 관한 스키마이다. 여기서 유심히 봐야할 부분은 Person의 stories와 Story의 fans는 리스트(배열)로 선언되었다는 부분이다. 이 부분은 현실을 반영해서 저렇게 구조를 설계하였다.
위의 코드를 보면 어느 부분이 참조를 하는 영역인지 알 수 있을 것이다. 기억해야할 사항은 참조하는 프로퍼티는 타입은 ObjectId로, 그리고 ref를 이용해서 어떤 model을 참조하는 지를 표현해줘야 한다.
참조 저장하기(Saving refs)
_id: new mongoose.Types.ObjectId(), // default로 설정되어 있는 항목 name: 'Catnap', age: 21 }); author.save(function (err) { // save를 해줘야 값이 DB에 저장이 된다. if (err) return handleError(err); var story1 = new Story({ title: "Catnap's Love Story", author: author._id // assign the _id from the person }); story1.save(function (err) { if (err) return handleError(err); // thats it! }); });