Node.js往MongoDB对象数组push新对象时添加独立_id的方法
解决MongoDB数组push时对象属性平级的问题
你当前代码里的问题是,直接在$push的对象中写myBody,导致它变成了嵌套的子属性。要让_id和myBody里的所有属性处于同一层级,只需要用对象展开运算符把myBody的属性拆出来,和_id放在同一个对象里即可。
修改后的完整代码如下:
const { ObjectId } = require('mongodb'); // 若使用Mongoose,可替换为mongoose.Types.ObjectId const { receivedEmail, ...myBody } = req.body studentModel.findOneAndUpdate( { email: req.body.receivedEmail }, { $push: { previousEducation: { _id: new ObjectId(), ...myBody } } } ) .then((response) => { res.send({ message: 'O level Result added successfully', status: true, response }); })
关键说明:
...myBody会把你解构得到的exam、subject、grade等所有键值对,直接展开到当前对象中,最终previousEducation新增的元素结构就是{ _id: "xxx", exam: "waec", subject: "english", ... },完全符合你需要的平级结构。- 注意确保
ObjectId已正确导入,Mongoose环境下可以用new mongoose.Types.ObjectId()生成ID。
内容的提问来源于stack exchange,提问作者Adex
相关产品推荐
相关产品推荐

