我正在构建一个应用程序使用猫鼬,并希望能够做到以下:
1)模型Fridge
包含一个groceries
字段,该字段是一个数组:
var Fridge = mongoose.Schema({
groceries: { type: [Grocery.schema] }
});
2) Grocery
模型是一个通用模型,可由其他模型继承:
var grocerySchema = mongoose.Schema({
name: { type: String }
});
var Grocery = mongoose.model("Grocery", grocerySchema);
3)例如,西红柿是一种杂货:
var tomatoSchema = mongoose.Schema({
size: { type: Number }
});
var Tomato = Grocery.discriminate("Tomato", tomatoSchema);
现在,如果我实例化一个西红柿并尝试将其保存在我的冰箱中,适当的Tomato
属性消失,因为(我猜),冰箱期望Grocery
,所以只保存Grocery
属性。
var tomato = new Tomato({ name: "a big nice tomato", size: 20 });
fridge.groceries = [tomato];
fridge.save(...)
// now fridge === { groceries: [{ name: "a big nice tomato" }] }
// and not { groceries: [{ name: "a big nice tomato", size: 20 }] }
我认为这是猫鼬的预期行为,在很多方面它是有意义的,但我宁愿不保存我的Groceries
在一个单独的集合,并保持引用它在我的Fridge
模型。因此,我希望我的冰箱保存西红柿的实例,而不是在单独的集合中引用Grocery
对象。是否有一个设计模式,将允许我这样做?
谢谢你的回答。 (P。S:由于临近晚餐时间,以上模型的名称纯粹是为了举例!
我认为现在不可能。你认为你必须保存番茄是对的,这将把它放在groceries
中,然后你可以从fridge
中引用它。