Node.js中Mongoose插入含嵌套对象的对象数组存空数据排查
问题原因与解决方案
我一眼就看出问题出在你创建Page_Categories实例的方式上,这才导致插入了空的categories数组。
错误根源
你的请求体req.body已经是一个包含categories键的对象(也就是你提供的JSON数据结构),但你在创建实例时写了:
const pageCategories = new Page_Categories({ data });
这行代码用了ES6的对象简写语法,相当于:
const pageCategories = new Page_Categories({ data: data });
而你的Mongoose Schema里并没有定义data字段,只有直接的categories数组字段。Mongoose会自动忽略Schema中未定义的属性,所以最终插入的文档里categories只能是默认的空数组[]。
修正方案
只需要把创建实例的代码改成直接传入data即可,因为data本身的结构就和你的Schema完全匹配:
const Page_Categories = require('../models/categories'); exports.savePageCategories = function (req, res, next) { const data = req.body; // 直接传入data,而不是包裹在{ data }里 const pageCategories = new Page_Categories(data); pageCategories.save((err, post) => { if (err) { return next(err); } res.status(201).json({ user: post }); }); };
更简洁的写法(可选)
你也可以用Mongoose的create方法直接创建并保存文档,省去手动实例化的步骤:
const Page_Categories = require('../models/categories'); exports.savePageCategories = function (req, res, next) { const data = req.body; Page_Categories.create(data, (err, post) => { if (err) { return next(err); } res.status(201).json({ user: post }); }); };
额外建议
为了避免后续出现类似问题,你可以在保存前先验证data.categories是否存在且不为空,比如:
if (!data.categories || !Array.isArray(data.categories) || data.categories.length === 0) { return res.status(400).json({ error: 'Invalid categories data' }); }
内容的提问来源于stack exchange,提问作者Hemadri Dasari
相关产品推荐
相关产品推荐

