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

执行Mongoose Find查询时打印结果异常,求助获取关联工单用户信息

解决Mongoose异步查询获取关联工单数据的问题

你的核心问题是Mongoose的find()是异步操作,直接把TicketDetails.find()赋值给tickets,得到的是Mongoose的Query对象(不是实际查询结果),所以console.log输出的是Query实例而非工单数据。

修复方案1:使用回调嵌套

把工单查询放在项目查询的回调里,通过回调获取实际数据后再渲染页面:

app.get("/posts/:postId", isLoggedIn, function(req, res) {
  const requestedPostId = req.params.postId;
  ProjectDetails.findOne({_id: requestedPostId}, function(err, post) {
    if (err) return console.error(err);
    // 传入回调获取工单数据
    TicketDetails.find({project: post.title}, function(err, tickets) {
      if (err) return console.error(err);
      console.log(tickets); // 现在能拿到实际工单数组
      // 把tickets传给ejs模板
      res.render("post", {
        title: post.title, 
        content: post.content,
        tickets: tickets
      });
    });
  });
});

修复方案2:使用async/await(更简洁)

将路由函数改为异步函数,用await等待异步查询完成:

app.get("/posts/:postId", isLoggedIn, async function(req, res) {
  try {
    const requestedPostId = req.params.postId;
    const post = await ProjectDetails.findOne({_id: requestedPostId});
    const tickets = await TicketDetails.find({project: post.title});
    console.log(tickets);
    res.render("post", {
      title: post.title, 
      content: post.content,
      tickets: tickets
    });
  } catch (err) {
    console.error(err);
    // 这里可以添加错误处理逻辑,比如返回404页面
  }
});

在post.ejs中展示指派用户

拿到tickets数组后,在模板里遍历即可展示所有指派用户:

<h2>关联工单的指派用户</h2>
<ul>
  <% tickets.forEach(ticket => { %>
    <li><%= ticket.username %></li> <!-- 这里的username对应你TicketDetails Schema里的字段名 -->
  <% }) %>
</ul>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:45:30