Node.js中如何基于索引获取/合并MongoDB对象数组中的值
实现MongoDB数据的指定格式输出
需求说明
从MongoDB获取集合数据后,需要将每个lead与其对应的members关联,输出如下格式内容:
- Index 0: Josh, Person A 50, Person B 100
- Index 1: Carl, Person A 25, Person B 50, Person C 75
原始数据结构
MongoDB返回的集合数据结构如下:
[ { "_id": "0001", "lead": "Josh", "members": [ { "name": "Person A", "points": 50 }, { "name": "Person B", "points": 100 } ] }, { "_id": "0002", "lead": "Carl", "members": [ { "name": "Person A", "points": 25 }, { "name": "Person B", "points": 50 }, { "name": "Person C", "points": 75 } ] } ]
错误分析
你之前尝试的双层循环错误地覆盖了group[i],将每个成员拆分为单独对象,导致索引对应关系混乱。正确思路是不修改原数组,直接生成目标格式的字符串。
解决方案代码
方式一:分步拼接字符串
let group = []; // 注意是forEach(大写E),将MongoDB结果存入数组 mongodb.query.forEach((result) => group.push(result)); // 生成目标格式的输出列表 const output = group.map((item, index) => { // 初始化行内容,包含索引和lead let lineContent = `Index ${index}: ${item.lead}`; // 遍历当前项的members,拼接每个成员的信息 item.members.forEach(member => { lineContent += `, ${member.name} ${member.points}`; }); // 加上列表前缀- return `- ${lineContent}`; }); // 打印所有结果 console.log(output.join('\n'));
方式二:用map简化成员拼接
let group = []; mongodb.query.forEach((result) => group.push(result)); // 更简洁的写法,用map处理成员数组后直接拼接 const output = group.map((item, index) => { const membersInfo = item.members.map(member => `${member.name} ${member.points}`).join(', '); return `- Index ${index}: ${item.lead}, ${membersInfo}`; }); console.log(output.join('\n'));
输出结果
运行上述代码后,会输出符合要求的内容:
- Index 0: Josh, Person A 50, Person B 100 - Index 1: Carl, Person A 25, Person B 50, Person C 75
内容的提问来源于stack exchange,提问作者user874737
相关产品推荐
相关产品推荐

