2013-12-10 3 views
17

내 응용 프로그램 모델을 정의하고 있고 내가 정의하고있는 각 모델에 대해 별도의 파일을 가지고 있습니다. 제 질문은 하위를 사용하는 모델을 만들어야한다는 것입니다. -document,하지만 다른 파일에 있는데, 어떻게 내 스키마에서 그 스키마를 사용할 수 있습니까?몽구스 하위 문서를 별도의 파일에 포함하는 방법

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 

    _id   : Schema.Types.ObjectId, 
    username  : String, 

}); 


module.exports = mongoose.model('User', userSchema); 
: 사용자 모델을 정의 나는 하나 개의 파일이 user.js을 불렀다

var childSchema = new Schema({ name: 'string' }); 

var parentSchema = new Schema({ 
    children: [childSchema] 
}); 

: 내 말은 내가 본 모든 예제는 아동 모델과 같은 파일에있는 부모, 예를 선언한다는 것입니다

그리고라는 다른 파일 sport.js에 나는 스포츠에 대한 다른 모델 정의가 :

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var sportSchema = new Schema({ 

    _id  : Schema.Types.ObjectId, 
    name  : String 

}); 

module.exports = mongoose.model('Sport', sportSchema); 

그래서 내 사용자 모델에 내가 번째 스포츠의 필드를 정의 할 필요를 전자 사용자가 따를 것이다,하지만 난 스포츠 정의가 다른 파일에 있기 때문에 그 하위 문서를 정의하는 방법을 몰라, 나는이 시도 :

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 
var SportsModel = require('sport'); 

var userSchema = new Schema({ 

    _id   : Schema.Types.ObjectId, 
    username  : String, 
sports   : [SportsModel] 

}); 


module.exports = mongoose.model('User', userSchema); 

을하지만 그 이후 올바른 방법입니다 있는지 확실하지 않습니다 무엇을 나는 모델이 아니라 스키마를 수출하고있다.

미리 감사드립니다. 주문을 유지하기 위해 각 모델을 별도의 파일에 정의하고 싶습니다.

답변

38

schema 속성을 통해 모델의 스키마에 액세스 할 수 있습니다. 그래서이 작동합니다 :

var userSchema = new Schema({  
    _id   : Schema.Types.ObjectId, 
    username  : String, 
    sports  : [SportsModel.schema]  
}); 
+0

대단히 감사합니다. – kevinblanco

+9

올바른 것으로 표시해야합니다. – arg20

+0

금, 순금입니다. – ggderas

7

사용 덧붙여 ref

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var userSchema = new Schema({ 
    _id  : Schema.Types.ObjectId, 
    username: String, 
    sports : [{ type: Schema.Types.ObjectId, ref: 'Sport' }] 
}); 

module.exports = mongoose.model('User', userSchema); 

ref와 함께, 당신은 쿼리 할 때 당신은 .populate('sports')을 사용할 수 있으며, 몽구스는 당신을 위해 그 유형을 확장됩니다.

+0

대단히 감사합니다. 왜 유형이 ObjectID입니까? – kevinblanco

+0

이것은 본질적으로 SQL의 외래 키와 같습니다. 그러나 ref는 내장 된 ObjectId 유형에서만 작동합니다. – tandrewnichols

+0

채우기를 사용하면 매우 위험 할 수 있습니다. MongoDB와 같은 문서 기반 데이터베이스의 경우 안티 패턴입니다. 사용자간에 스포츠를 공유 할 필요가없는 경우 하위 문서를 사용하는 것이 좋습니다. 기본적으로 MongoDB는 관계형 데이터베이스가 아니라는 것을 기억하는 것이 중요합니다. – catalyst294

관련 문제