返回推送对象的ID node.js猫鼬

时间:2020-04-14 05:22:27

标签: javascript node.js reactjs mongoose

我在文档(产品)中有对象数组(批次)。
将新对象推送到该数组后,我只想在axios post响应中返回新添加的对象的自动生成的ID。请怎么做?

batchRoutes.route('/add/:id').post(function(req,res){
    Product.findOneAndUpdate(
        {"_id":req.params.id},
        {$push:{"batches":req.body}},

        function(err,batch){
            if(err){
                return res.json({'status':false});
            }
            else{
              return res.json({'status':true});
            }

        });
});

模式

let Product= new Schema({
    productName:{
        type:String
    },
    batches:[{    
            batchNo:{
                type:String
            },
            expDate:{
                type:Date
            },

    }]
},

1 个答案:

答案 0 :(得分:0)

您可以使用{new: true}选项访问更新的文档,文档批处理数组中的最后一个ID是新生成的ID。

所以更改是:

1-)将{ new: true }选项添加为第三个参数

2-)获取最后生成的ID:const batchId = doc.batches[doc.batches.length - 1]._id;

batchRoutes.route("/add/:id").post(function (req, res) {
  Product.findOneAndUpdate(
    { _id: req.params.id },
    { $push: { batches: req.body } },
    { new: true },
    function (err, doc) {
      if (err) {
        return res.json({ status: false });
      } else {
        if (doc) {
          const batchId = doc.batches[doc.batches.length - 1]._id;
          return res.json({ status: true, batchId });
        } else {
          return res.status(404).json({ status: false });
        }
      }
    }
  );
});