2013-10-01 66 views
2

我有四個貓鼬模型,SoleTraderPartnershipCompanyTrust。它們的不同之處在於我無法將它們全部合併到一個模式中,但它們的相似程度足以讓我經常需要一次查詢或更改所有4種類型,而且很少關心它們的類型。是否可以同時搜索多個型號貓鼬?

是否有這樣做的一種方式 - 通過將所有四種類型的單個集合可能 - 未做4個數據庫每次調用?

+0

同類問題[here](http://stackoverflow.com/questions/14228882/inheritance-in-mongoose)。的有上述[貓鼬-架構延伸(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

謝謝,這工作。將基本模式作爲模型保存的想法從未發生過;我只是保存了它的擴展名。儘管如此,我一直在使用鑑別器密鑰的問題。它根本沒有被保存。 – cbnz

+0

@cbnz在我的情況下,鍵被保存到數據庫中,但它並未被用於將結果「轉換」爲正確的模型。我會提交一份錯誤報告:) – robertklep