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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 21:20:31