MongoDB创建文档时直接填充数组失效,updateOne方式可行的问题咨询
解决方案:MongoDB创建文档时直接填充数组的正确方式
你遇到的问题核心是Mongoose模型构造函数不支持直接使用MongoDB更新操作符(如$push)——构造函数仅用于初始化文档的原始字段值,无法识别更新指令,所以第一种写法里的$push完全不起作用。
以下是两种更简便的一步式实现方法:
方法一:直接赋值数组字段
创建文档时直接将解析后的数组赋值给images字段,无需使用更新操作符:
const newHouse = await House({ userId: req.body.userId, name: req.body.name, description: req.body.description, lat: req.body.lat, long: req.body.long, images: JSON.parse(req.body.images) // 直接设置数组值 }); await newHouse.save();
方法二:使用create方法一步完成
Mongoose的create方法可以直接传入完整的文档数据,一步完成创建与保存:
const newHouse = await House.create({ userId: req.body.userId, name: req.body.name, description: req.body.description, lat: req.body.lat, long: req.body.long, images: JSON.parse(req.body.images) });
为什么原第一种写法无效?
Mongoose模型实例的构造函数是用来初始化原始文档数据的,而$push、$set这类操作符属于MongoDB的更新操作指令,仅适用于修改已存在的文档(比如你第二种写法里的updateOne),所以在构造实例时写入$push不会被解析执行,数组自然为空。
内容的提问来源于stack exchange,提问作者Captai-N
相关产品推荐
相关产品推荐

