在Mongoose模式中指定用于继承的泛型模型



我正在构建一个应用程序使用猫鼬,并希望能够做到以下:

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中引用它。

最新更新