これは別の弁別を定義する方法についての例である:
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var Business = require('../models/business');
var BusinessProductCategory = require('../models/businessProductCategory');
var MasterProduct = require('../models/masterProduct');
var common = require('../middlewares/common');
var nameMinLength = [3, 'The value of path `{PATH}` (`{VALUE}`) is shorter than the minimum allowed length ({MINLENGTH}).'];
var options = {discriminatorKey: 'kind'};
var businessProductSchema = mongoose.Schema({
business: {type: Schema.Types.ObjectId, ref: 'Business'},
productPrices: [{
value: {type: Number, required: true},
currency: {type: String, required: true},
description: {type: String, required: true},
createdAt: {type: Date, default: Date.now, required: true},
updatedAt: {type: Date, default: Date.now, required: true}
}],
is_show_in_store: {type: Boolean, default: true, required: true},
record_status: {type: String, enum: ['active', 'archived'], required: true, default: 'active'},
}, options);
businessProductSchema.post('save', common.handlerMongoErrors);
businessProductSchema.post('update', common.handlerMongoErrors);
var BusinessProduct = mongoose.model("BusinessProduct", businessProductSchema);
var ManagedProduct = BusinessProduct.discriminator('ManagedProduct', new mongoose.Schema({
master_product: {type: Schema.Types.ObjectId, ref: 'MasterProduct'},
}), options);
var LocalProduct = BusinessProduct.discriminator('LocalProduct', new mongoose.Schema({
name: {type: String, required: true, minlength: nameMinLength},
description: {type: String},
primary_category: {type: Schema.Types.ObjectId, ref: 'BusinessProductCategory'},
brand: {type: String, required: true},
created_at: {type: Date, required: true},
updated_at: {type: Date, required: true},
}, options));
module.exports = {BusinessProduct: BusinessProduct, ManagedProduct: ManagedProduct, LocalProduct: LocalProduct};
あなたがそうfind()メソッドで子を使用する場合は、find()メソッドでParentModelを使用してすべての文書を照会することができます検索の呼び出しに使用した子のタイプのみをフィルタリングします。
これは、ディスクリミネータをコントローラからの使用に適切な方法で定義する方法を理解する助けになりました:) –