注文と注文ごとのアイテムを処理するために、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();
});
問題は、明らかに ごとに 1 つのアイテムが必要itemIdであり、この方法でアイテムごとに多くのサブドキュメントを取得することです...
1 つの解決策は、 all をループすることorder.itemsですが、もちろんこれは最適ではありませorder.itemsん(多くの可能性があります...) . クエリを実行するときに同じ問題が発生する可能性がありorder.itemsます...
itemPerOrderSchema問題は、注文に既に挿入されているすべてのアイテムをループすることなく、配列にアイテムを挿入するにはどうすればよいかということです。