2016-10-24 3 views
2

Я строю приложение, используя Mongoose и хотел бы быть в состоянии сделать следующее:Определение общей модели наследования в 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 }] } 

Я думаю, что это ожидаемое поведение Mongoose, и во многом это имеет смысл, но я предпочел бы не сохранить свои Groceries в отдельную коллекцию и сохранить ссылки на него в моей Fridge модели. Поэтому я хотел бы, чтобы мой холодильник вмещал экземпляры томатов, а не ссылки на объект Grocery в отдельной коллекции. Есть ли шаблон дизайна, который позволил бы мне это сделать?

Благодарим вас за ответ. (P.S: из-за близости к обеденному времени, модели, приведенные выше, были названы, например, просто ради!)

ответ

1

Я не думаю, что это возможно прямо сейчас. Вы правы, думая, что вам нужно сохранить помидор, который поместит его в groceries, а затем вы можете обратиться к нему с fridge.

+0

Это грустно :(Я пытаюсь придумать умный взломать, но спасительные ссылки могут быть проще, чем тогда ... –