【发布时间】:2016-04-14 21:02:21
【问题描述】:
我在 MEAN 项目中使用子文档来处理订单和每个订单的项目。
这些是我的(简化的)架构:
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 架构只有项目或项目加上项目 ID?我使用类似的格式,我直接将元素推入数组,如果你想要代码,我可以在这里粘贴。
-
它也有 itemid (
var itemPerOrderSchema = new mongoose.Schema({ itemId: String, ...)。如果您可以粘贴您的代码(当然是在答案中,而不是在评论中),它肯定会有所帮助... -
modelname.findOneAndUpdate({_id: idname}, {$addToSet: { items: { $each: iems} }}, function(err, docs) {}- 这就是我所做的。 -
iems你的意思是items?但是item要插入到哪里呢? -
iems 是项目,拼写错误 - 抱歉。在我的例子中,iems 是一个字符串数组。您必须插入一个对象。
标签: node.js mongodb subdocument