You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 08:04:21