#node.js #mongodb #mongoose
#node.js #mongodb #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 и попытаюсь сохранить его в своем холодильнике, соответствующие 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
модели. Итак, я хотел бы, чтобы мой холодильник содержал экземпляры tomatoes, а не ссылки на Grocery
объект в отдельной коллекции. Существует ли шаблон проектирования, который позволил бы мне это сделать?
Спасибо за ваш ответ. (P.S: из-за близости времени обеда вышеприведенным моделям были присвоены имена исключительно для примера!)
Ответ №1:
Я не думаю, что это возможно прямо сейчас. Вы правы, думая, что вам нужно сохранить tomato, который поместит ее в groceries
, а затем вы сможете ссылаться на это из fridge
.
Комментарии:
1. Это печально : ( Я пытаюсь придумать умный взлом, но тогда сохранение ссылок, возможно, будет проще…