Mongoose를 사용하여 개발하는중 외래키를 어떻게 잡는지 궁금하여 찾아보았다. 몽구스 현재 버전은 3.6.11 - GitHub
1. 외래키 잡기
- 메뉴얼 : http://mongoosejs.com/docs/populate.html
+ _id가 Number이므로 story에서도 Number로 타입을 가져가야 한다
var mongoose = require('mongoose') , Schema = mongoose.Schema var personSchema = Schema({ _id : Number, name : String, age : Number, stories : [{ type: Schema.Types.ObjectId, ref: 'Story' }] // 여러 이야기 - 배열 }); var storySchema = Schema({ _creator : { type: Number, ref: 'Person' }, // 글쓴이 한 사람 title : String, fans : [{ type: Number, ref: 'Person' }] // 해당 글에 대한 여러 팬들 - 배열 }); var Story = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);
2. 플러그인
- 플로그인은 mongoose의 middleware 기능을 이용하여 만들 수 있다. 즉, 몽고디비에 대한 쿼리가 진행되기 전에 pre action을 수행하고 next할 수가 있는 것이다. Connect 프레임워크의 next와 유사하다고 보면 된다.
- 플러그인 검색 사이트 : http://plugins.mongoosejs.com
+ 해당 사이트에서 검색을 통하여 플러그인을 찾을 수 있다.
+ increment로 검색을 수행하여 auto increment 플러그인 찾음.
https://github.com/mariodu/mongoose-id-autoinc
var dbName = 'id_autoinc_example',mongoose = require('mongoose'),Schema = mongoose.Schema,db = mongoose.createConnection('127.0.0.1', dbName),// 모듈 로딩autoinc = require('../index');// 모듈 초기화// Counter 테이블이 만들어 진다. 만일 Sequence 관리용 다른명칭을 주고 싶다면// autoinc.init(db, 'AnotherName');autoinc.init(db);var UserSchema = new Schema({name: String,email: String});// 플로그인 설정UserSchema.plugin(autoinc.plugin, {model: 'User',field: 'seqnumber', // field 정보 안주면 기본 _id 를 Number의 sequence field로 사용한다start: 100,step: 10});var User = db.model('User', UserSchema);console.log('Database: ' + dbName);console.log('Collection: ' + User.collection.name);var user_1 = new User({name: 'Dowon',email: 'dowon@google.com'});user_1.save(function (err, res) {console.log('New record added:');console.log(res);});var user_2 = new User({name: 'YoungSik',email: 'youngsik@apple.com'});user_2.save(function (err, res) {console.log('New record added:');console.log(res);mongoose.disconnect();
});
- StackOverFlow 에서 도움을 받자
+ http://stackoverflow.com/questions/tagged/mongoose
3. Smart Dashboard 외래키와 _id 숫자 증가 시키기
- service 모듈에서 mongoose와 db connection을 만들어서 전달 받았다. db connection을 두번 만들면 mongoose에서 오류 뱃음.
- Dashboard안에는 여러 Component가 존재하고 Component는 여러 Dashboard에서 사용 될 수 있다
- 하기와 같이 사용을 하면 mongo shell 을 통하여 direct insert를 하면 안된다 (주의)
<참조>
- Connect의 next() 이해하기 (필독)
'MongoDB > Prototyping' 카테고리의 다른 글
[MongoDB] Index 생성/삭제하기 (0) | 2013.07.27 |
---|---|
[Mongoose] Schema의 Virtual, Method, Pre 테스트 (0) | 2013.07.10 |
[MongoDB] node.js에서 mongoose 외 기타 클라이언트모듈 통하여 연결하기 (0) | 2013.02.16 |
[MongoDB] mongos 통하여 Sharding 환경 구성하기 (1) (0) | 2013.01.05 |
[MongoDB] Replication and Repica Sets 만들기 (0) | 2013.01.05 |