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

Mongoose嵌套数组处理:如何生成用户-产品关联表格?

解决Operator下多用户表格渲染问题

一、修复后端数据获取代码

当前后端代码存在两个问题:一是在forEach循环内调用res.render会导致首次循环就发送响应,后续数据无法处理;二是全局数组operatorArray会累积重复数据。修正后的代码如下:

exports.getOperatorInformations = (req, res, next) => {
  Operators.find({}, function(err, docs) {
    if (err) {
      return res.status(500).send('获取数据失败');
    }
    // 直接将查询结果传给模板,无需额外数组存储
    res.render('home', { operators: docs });
  });
};

二、调整EJS模板实现嵌套循环

要展示每个Operator下的所有用户数据,需要在模板中做嵌套循环:外层遍历Operator列表,内层遍历当前Operator的users数组,为每个用户生成一行表格数据。同时处理数组类型的字段(如productsSerialNumber):

<table>
  <thead>
    <tr>
      <th>OperatorName</th>
      <th>productsSerialNumber</th>
      <th>username</th>
      <th>mail</th>
      <th>Date</th>
      <th>Payment</th>
    </tr>
  </thead>
  <tbody>
    <% operators.forEach(function(operator) { %>
      <%// 遍历当前Operator下的所有用户 %>
      <% operator.users.forEach(function(user) { %>
        <tr>
          <td><%= operator.operatorName %></td>
          <td>
            <%// 将产品序列号数组转为逗号分隔的字符串 %>
            <%= operator.productsSerialNumber.map(item => item.productSerialNumbers).join(', ') %>
          </td>
          <td>
            <%// 注意:你的Schema中users未定义username字段,需补充后才能显示,这里先设默认值 %>
            <%= user.username || '未填写' %>
          </td>
          <td><%= user.email %></td>
          <td><%= user.paymentsData.toLocaleString() %></td>
          <td><%= user.payment %></td>
        </tr>
      <% }) %>
    <% }) %>
  </tbody>
</table>

补充:完善Schema字段

你的operatorSchema中users数组缺少username字段,需要补充才能在表格中展示该列:

const operatorSchema = new Schema({
    operatorName: { type: String },
    productsSerialNumber:[{productSerialNumbers: String}],
    operatorSerialNumber: { type: Number },
    users:[{
        username: String, // 新增username字段
        email:String,
        payment:Number,
        paymentsData: Date,
      }],
    operatorState:{ type: Boolean }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:54:20