如何设置创建新文档并将新文档存储在另一个文档的数组字段中的路由

时间:2019-11-27 09:51:22

标签: node.js express mongoose

我正在尝试创建一个清单应用程序。我想要一种情况,将特定产品上的每个订单都存储在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,但似乎无法弄清楚如何编写所需路线的代码

1 个答案:

答案 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');
});

上面的代码未经测试。只是给您如何实现它的想法。代码可以改进。