MongoDB 6查询数据仅返回_id,console.log显示undefined求助
问题解决:MongoDB数据仅显示_id,其余字段丢失且console.log输出undefined
核心错误:模型创建语法错误
你创建Item模型时犯了关键语法错误,这是导致数据异常的根本原因:
// 错误写法:将Schema包裹在对象中 const Item = mongoose.model('Item', {itemSchema}); // 正确写法:直接传入Schema对象 const Item = mongoose.model('Item', itemSchema);
错误写法会让Mongoose把字段嵌套在itemSchema对象下,数据库中文档结构变成{_id: ..., itemSchema: {name: ...}},而非预期的{_id: ..., name: ...},这就是你只能看到_id、其余数据无法读取的原因。
其他需修复的问题
未处理
insertMany异步逻辑insertMany是异步方法,直接调用会导致服务器每次重启都重复插入默认数据,需添加判断仅在集合为空时插入:Item.countDocuments().then(count => { if(count === 0) { return Item.insertMany(defaultItem); } }).catch(err => console.error(err));未声明全局变量
路由中用到的workItems和items未提前声明,会触发报错,需先定义:let workItems = []; let items = [];日志位置不合理
你在res.render之后执行console.log(foundItems),虽不影响功能,但建议将日志放在渲染前,方便调试:Item.find() .then((foundItems) => { console.log(foundItems); res.render("list", {listTitle: "Today", newListItems: foundItems}) }) .catch((error) => { console.error(error); });
修复后的核心代码片段
const itemSchema = new mongoose.Schema({ name: String }); // 修复模型创建逻辑 const Item = mongoose.model('Item', itemSchema); const item1 = new Item({name: 'Welcome to your todolist'}); const item2 = new Item({name: 'HIT THE + BUTTON TO ADD A NEW ITEM.'}); const item3 = new Item({name: '<--Hit this to delete an item.'}); const defaultItem = [item1,item2,item3]; // 修复默认数据插入逻辑 Item.countDocuments().then(count => { if(count === 0) { return Item.insertMany(defaultItem); } }).then(() => console.log('默认数据插入成功')) .catch(err => console.error(err)); // 修复路由日志位置 app.get("/", function(req, res) { Item.find() .then((foundItems) => { console.log(foundItems); res.render("list", {listTitle: "Today", newListItems: foundItems}) }) .catch((error) => { console.error(error); }); }); // 声明未定义的变量 let workItems = []; let items = []; app.post("/", function(req, res){ const item = req.body.newItem; if (req.body.list === "Work") { workItems.push(item); res.redirect("/work"); } else { items.push(item); res.redirect("/"); } });
内容的提问来源于stack exchange,提问作者okorie wisdom
相关产品推荐
相关产品推荐

