我有四個貓鼬模型,SoleTrader
,Partnership
,Company
和Trust
。它們的不同之處在於我無法將它們全部合併到一個模式中,但它們的相似程度足以讓我經常需要一次查詢或更改所有4種類型,而且很少關心它們的類型。是否可以同時搜索多個型號貓鼬?
是否有這樣做的一種方式 - 通過將所有四種類型的單個集合可能 - 未做4個數據庫每次調用?
我有四個貓鼬模型,SoleTrader
,Partnership
,Company
和Trust
。它們的不同之處在於我無法將它們全部合併到一個模式中,但它們的相似程度足以讓我經常需要一次查詢或更改所有4種類型,而且很少關心它們的類型。是否可以同時搜索多個型號貓鼬?
是否有這樣做的一種方式 - 通過將所有四種類型的單個集合可能 - 未做4個數據庫每次調用?
由於您使用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根據鑑別密鑰對我不起作用返回正確的模型實例。
謝謝,這工作。將基本模式作爲模型保存的想法從未發生過;我只是保存了它的擴展名。儘管如此,我一直在使用鑑別器密鑰的問題。它根本沒有被保存。 – cbnz
@cbnz在我的情況下,鍵被保存到數據庫中,但它並未被用於將結果「轉換」爲正確的模型。我會提交一份錯誤報告:) – robertklep
同類問題[here](http://stackoverflow.com/questions/14228882/inheritance-in-mongoose)。的有上述[貓鼬-架構延伸(https://github.com/briankircho/mongoose-schema-extend)聽起來是有用的。 – robertklep
我已經在使用mongoose-schema-extend創建模式,但據我所知,它沒有提供任何有助於解決此問題的方法。讓我知道如果我錯過了什麼。 – cbnz