Поскольку вы используете 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) {
...
});
Однако, я должен сказать, что advertised behaviour из find()
возвращает правильный экземпляр модели в соответствии с ключом дискриминатора не работает для меня.
Аналогичный вопрос [здесь] (http://stackoverflow.com/questions/14228882/inheritance-in-mongoose). Здесь упоминается [mongoose-schema-extend] (https://github.com/briankircho/mongoose-schema-extend). – robertklep
Я уже использую mongoose-schema-extend для создания схем, но, насколько я могу судить, он не предлагает ничего, что могло бы помочь с этой проблемой. Дайте мне знать, если я что-то упустил. – cbnz