Я использую поддокументы в моем проекте MEAN, чтобы обрабатывать заказы и элементы за заказ.MongoDB: как вставить поддоку?
Это мои (упрощенный) схемы:
var itemPerOrderSchema = new mongoose.Schema({
itemId: String,
count: Number
});
var OrderSchema = new mongoose.Schema({
customerId: String,
date: String,
items: [ itemPerOrderSchema ]
});
Для вставки элементов в itemPerOrderSchema массива я в настоящее время сделать:
var orderId = '123';
var item = { itemId: 'xyz', itemsCount: 7 };
Order.findOne({ id: orderId }, function(err, order) {
order.items.push(item);
order.save();
});
Проблема заключается в том, что я, очевидно, хочу один пункт за itemId
, и таким образом я получаю много поддокументов на элемент ...
Одним из решений может быть цикл через все order.items
, но это, конечно, не оптимально (order.items
может мне много ...). Та же проблема может возникнуть при запросе order.items
...
Вопрос: Как вставить элементы в массиве itemPerOrderSchema
без перебора всех элементов уже вставленных в порядке?
itemPerOrder Schema имеет только элементы или предметы плюс идентификатор товара? Я использую аналогичный формат, и я напрямую вставляю элементы в массив, если вы хотите код, тогда я могу вставить его здесь. –
У него тоже itemid ('var itemPerOrderSchema = new mongoose.Schema ({itemId: String, ...'). Если вы можете вставить свой код (в ответе, а не в комментарии, конечно), это может помогите, точно ... – MarcoS
'modelname.findOneAndUpdate ({_ id: idname}, {$ addToSet: {items: {$ each: iems}}}, function (err, docs) {}' - Это то, что я делаю –