我试图将discountSchema
用作类型。但是我收到了这个错误:
throw new TypeError('Undefined type at `' + path +
^
TypeError: Undefined type at `discount`
但如果我转换为array
类型:
discount: {
type: [discountSchema],
default:{}
}
它有效。
我如何在猫鼬中使用复杂类型? 我是以错误的方式使用这个模型吗?我怎样才能像这样建模这个对象?
var discountSchema = new Schema({
type: {type: String,default:'' },
quantity: {type: Number,default:0 },
value: {type: Number,default:0 }
});
var objectEncomendaPropertiesSchema = {
recheios:{
type:[String],
default: [],
select: true
},
availableEncomenda: {
type: Boolean,
default:false
},
discount: {
type: discountSchema,
default:{}
}
};
答案 0 :(得分:2)
您无法设置 embedded documents
存储为mongoose中的单个属性,它们始终存储在数组中。
最接近此行为的是将您的媒体资源设置为ObjectId
ref
并使用populate
方法获取它。
看看here,了解这种方法的工作原理。
查看嵌入文档docs。
GitHub上有open issue请求你想要的行为。
答案 1 :(得分:0)
你试图创建两个模式然后连接它们吗?
var discountSchema = new Schema({
type: {type: String,default:'' },
quantity: {type: Number,default:0 },
value: {type: Number,default:0 }
});
mongoose.model('Discount', discountSchema);
var objectEncomendaPropertiesSchema = new Schema({
recheios:{
type: String,
default: '',
select: true
},
availableEncomenda: {
type: Boolean,
default:false
},
discount: {
type: Schema.Types.ObjectId,
ref: 'Discount'
}
})
mongoose.model('objectEncomendaProperties', objectEncomendaPropertiesSchema);
我引用第二个模式中的折扣来引用ObjectId的第一个模式 它将在Discount模型中将属性作为第二个Schema中的discount属性获取。