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
相关产品推荐
相关产品推荐

