返回推送对象的 id nodejs mongoose
Posted
技术标签:
【中文标题】返回推送对象的 id nodejs mongoose【英文标题】:return pushed object's id nodejs mongoose 【发布时间】:2020-07-26 19:06:10 【问题描述】:我在文档(产品)中有对象数组(批次)。 将新对象推送到该数组后,我只想在 axios 发布响应中返回新添加的对象的自动生成 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】:您可以使用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 );
);
);
【讨论】:
这并不总是正确的,因为操作不是原子的。如果在const batchId = doc.batches[doc.batches.length - 1]._id;
之前有多个并行插入,那么这不会给出预期的结果以上是关于返回推送对象的 id nodejs mongoose的主要内容,如果未能解决你的问题,请参考以下文章
无法得到我在 nodejs / mongoose / bluebird 中返回的承诺
Mongoose/Nodejs - 填充函数仅返回用户的对象 ID