2013-10-01 3 views
2

몽구스 모델이 4 개 있는데, SoleTrader, Partnership, CompanyTrust입니다. 그것들은 충분히 다르기 때문에 모든 것을 하나의 스키마로 병합 할 수는 없지만 한 번에 네 가지 유형 모두를 쿼리하거나 변경할 필요가 거의 없으며 어떤 종류인지는 거의 신경 쓰지 않습니다.한 번에 여러 몽구스 모델을 검색 할 수 있습니까?

매번 네 번 데이터베이스 호출을하지 않고도 단일 컬렉션에 네 가지 유형 모두를 넣을 수 있습니까?

+0

비슷한 질문 [여기] (http://stackoverflow.com/questions/14228882/inheritance-in-mongoose). 거기에 언급 된 [mongoose-schema-extend] (https://github.com/briankircho/mongoose-schema-extend)가 유용하게 들립니다. – robertklep

+0

나는 이미 mongoose-schema-extend를 사용하여 스키마를 만들었지 만 내가 알 수있는 한이 문제에 도움이되는 것은 아무것도 제공하지 않는다. 내가 뭔가를 놓친다면 알려줘. – cbnz

답변

3

mongoose-schema-extend을 사용하고 있기 때문에 간단한 '기본'스키마를 만들고 다른 스키마를 확장 할 수있는 것처럼 보입니다. 모든 항목을 검색하려면 기본 모델을 사용하십시오. 예를 들어

:

// base schema 
var PersonSchema = new Schema({ 
    name : String 
}, { 
    collection  : 'users', // everything will get saved in the same collection 
    discriminatorKey : '_type' 
}); 

// two schema's that extend off it 
var EmployeeSchema = PersonSchema.extend({ department : String }); 
var EmployerSchema = PersonSchema.extend({}); 

// materialize all three into models 
var Person = mongoose.model('Person', PersonSchema); 
var Employee = mongoose.model('Employee', EmployeeSchema); 
var Employer = mongoose.model('Employer', EmployerSchema); 

... 

// create some people 
new Employee({ 
    name  : 'Homer Simpson', 
    department : 'Safety' 
}).save(...); 

new Employer({ 
    name : 'Charles Montgomery Burns', 
}).save(...); 

... 

// search across employers and employees 
Person.find({ ... }, function(err, people) { 
    ... 
}); 

는 그러나, 나는 find()advertised behaviour 나를 위해 작동하지 않습니다 판별 키에 따라 올바른 모델 인스턴스를 반환하는 것을 말해야한다.

+0

고마워, 그거야. 기본 스키마를 모델로 저장한다는 아이디어는 나에게 전혀 발생하지 않았습니다. 나는 그 확장 기능 만 저장했다. 나는 discriminator 키를 가지고 같은 문제를 겪어왔다. 그것은 전혀 저장되지 않습니다. – cbnz

+0

@cbnz 키가 제 경우에는 데이터베이스에 저장되지만 결과를 올바른 모델로 '캐스팅'하는 데 사용되지 않습니다. 나는 버그 보고서를 제출할 것이다 :) – robertklep

관련 문제