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

