我正在尝试创建一个清单应用程序。我想要一种情况,将特定产品上的每个订单都存储在ProductInventory文档上的Array中。我有一个ProductInventory模式和Orders模式。
// productInventory Schema
const ProductInventorySchema = new mongoose.Schema({
name : String,
description : String,
price:Number,
quantity :Number,
supplier : String,
taxable : Boolean,
orders: {
type: Schema.Types.ObjectId,
ref: "Orders",
required: true
},
},{timestamps:true});
module.exports = mongoose.model('inventory', ProductInventorySchema)
// Order Schema
const OrderSchema = new mongoose.Schema({
name : String,
quantity: Number,,
issuedBy : String,
collectedBy: String,
department : String,
},{timestamps:true});
module.exports = mongoose.model('order', OrderSchema)
我的策略是:将特定产品上的每个订单都附加到ProductInventory,这样,我可以做一些事情,例如计算总订单数量并从ProductInventory数量中减去,我还可以查询所有相关的订单到每个产品库存。
我的挑战基本上是编写一个代码,以创建一个新订单,然后将其追加到选定的ProductInventory上,最后将其作为数组存储在ProductInventory文档上。
我知道我最好的选择之一是使用猫鼬的Populate API,但似乎无法弄清楚如何编写所需路线的代码
答案 0 :(得分:0)
您的ProductInventorySchema
模式应如下所示:
const ProductInventorySchema = new mongoose.Schema({
name : String,
description : String,
price:Number,
quantity :Number,
supplier : String,
taxable : Boolean,
orders: [{
type: Schema.Types.ObjectId,
ref: "orders",
required: true
}],
},{timestamps:true});
示例端点:
const Inventory = require('./productInventorySchema.js');
const Order = require('./orderSchema.js');
app.post('/order', async (req, res) => {
const { name, quantity, issuedBy, collectedBy, department, inventoryId } = req.body;
const order = await Order.create({
name,
quantity,
issuedBy,
collectedBy,
department
});
const inventory = await Inventory.find({ _id: inventoryId });
inventory.orders.push(order._id);
await inventory.save();
res.send('Order created');
});
上面的代码未经测试。只是给您如何实现它的想法。代码可以改进。