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

Node.js向MongoDB提交对象数组失败,仅存入空数组求助

问题解决:将对象数组存入MongoDB的item字段

问题原因

你在实例化Items模型时,传入的对象键是obj,但Schema定义的字段是item。Mongoose会自动忽略Schema中未定义的字段,因此item字段始终使用默认的空数组。

解决方案

确保实例化模型时的键名和Schema中的字段名一致,以下两种方式均可:

方式1:显式指定字段名

将new Items({obj})改为new Items({item: obj}),把obj数组赋值给Schema的item字段。

修改后的Post路由代码:

const router = require('express').Router();
let Items = require('../models/items.modal');

router.route('/add').post((req, res) => {
  const obj = [
    {
      "name":"name1"
    },
    {
      "name":"name2"
    },
    {
      "name":"name3"
    }
  ]
  // 显式映射字段
  const newItems = new Items({item: obj});

  newItems.save()
    .then(() => res.json('User added!'))
    .catch(err => res.status(400).json('Error: ' + err));
});

module.exports = router;

方式2:统一变量名与字段名

把变量名从obj改成item,使用ES6对象简写语法:

修改后的Post路由代码:

const router = require('express').Router();
let Items = require('../models/items.modal');

router.route('/add').post((req, res) => {
  // 变量名与Schema字段名统一
  const item = [
    {
      "name":"name1"
    },
    {
      "name":"name2"
    },
    {
      "name":"name3"
    }
  ]
  // 简写语法赋值
  const newItems = new Items({item});

  newItems.save()
    .then(() => res.json('User added!'))
    .catch(err => res.status(400).json('Error: ' + err));
});

module.exports = router;

验证结果

修改后重新调用接口,数据库中存入的文档会变为:

{
    "_id": "xxxxxx",
    "item": [
        {"name":"name1"},
        {"name":"name2"},
        {"name":"name3"}
    ],
    "__v": 0
}

内容的提问来源于stack exchange,提问作者Phakamani Xulu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 06:10:31