我在文档(产品)中有对象数组(批次)。
将新对象推送到该数组后,我只想在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
},
}]
},
答案 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 });
}
}
}
);
});