我尝试使用 mongoose-schema-extend 实现 mongoDB 子文档的继承,然后使用 mongoose 本身。基本要求是在继承类中定义附加属性并将它们放在 DB 上——这在两种方法中都可以正常工作。第二个要求是能够区分类型——使用 discriminatorType 和 instanceOf。discriminatorType 没有使用 mongoose-schema-extend 保存在 DB 中,仅直接使用 mongoose discriminator。instanceOf 在这两种情况下都不起作用(在 parentDocument.find 之后)- 口袋似乎只是对象。
猫鼬模式扩展的代码:
var PocketSchema = new mongoose.Schema({
name: {type: String, unique: true , required: true}, //required - not working within array
status: {type: String , enum :['ACTIVE','RETIRED'], Default:'ACTIVE' },
limits : ['Limit']
},{ discriminatorKey : '_type' });
dbConn.model('Pocket', PocketSchema);
var CreditCardPocketSchema =dbConn.models.Pocket.schema.extend({
PAN : {type: String, required: true }
});
dbConn.model('CreditCardPocket', CreditCardPocketSchema);
var customerSchema = mongoose.Schema({
username: {type: String, unique: true, required: true } ,
password: String,
email: { type: String },
status: {type: String , enum :['REGISTERED','ACTIVE','RETIRED'] , Default:'REGISTERED'},
pockets : ['Pocket']
});
带有 util.extend 的猫鼬代码:
function PocketSchema() {
mongoose.Schema.apply(this, arguments);
this.add({
name: {type: String, unique: true , required: true},//required - not working within array
status: {type: String , enum :['ACTIVE','RETIRED'], Default:'ACTIVE' },
limits : ['Limit']
});
};
util.inherits(PocketSchema, mongoose.Schema);
var pocketSchema = new PocketSchema();
dbConn.model('Pocket', pocketSchema);
var CreditCardPocketSchema = new PocketSchema({
PAN : {type: String, required: true }
});
dbConn.models.Pocket.discriminator('CreditCardPocket', CreditCardPocketSchema);
**检查instanceOf的代码:**
exports.showPockets = function(req, res){
var username = req.params.username;
dbConn.models.Customer.findOne({username:username},function(err,user) {
if (user === null) {
res.send('user does not exist');
}else {
user.pockets[0] instanceof dbConn.models.CreditCardPocket;
user.pockets[0] instanceof dbConn.models.Pocket;
dbConn.models.Pocket.prototype.isPrototypeOf(user.pockets[0]);
dbConn.models.SVAPocket.prototype.isPrototypeOf(user.pockets[0]);
}
});
};
mongoose-schema-extend 鉴别器对子文档不能正常工作吗?例如,这不应该返回 true 吗?
提前致谢。