Mongoose查询结果格式化:生成指定格式的tmi.js排行榜
解决方案
直接用数组的map()和join()方法就能快速完成格式转换,结合你的Mongoose查询和tmi.js场景,完整实现如下:
1. 核心转换逻辑
把查询得到的对象数组,逐个转成你要的字符串格式,再拼接起来:
// sortedUsers 是你通过Sub.find查询得到的排序后数组 const leaderboardStr = sortedUsers.map(user => `'${user.userName}' score: ${user.score}`).join(', ');
2. 结合Mongoose查询的完整函数
async function getFormattedLeaderboard() { // 查询数据:只取userName和score字段,按score降序排序 const sortedUsers = await Sub.find({}, 'userName score').sort({ score: -1 }).lean(); // 空数据处理 if (!sortedUsers.length) return '暂无排行榜数据'; // 格式转换 return sortedUsers.map(user => `'${user.userName}' score: ${user.score}`).join(', '); }
3. 在tmi.js中调用(比如响应直播间指令)
// 假设你的tmi客户端实例是client client.on('message', async (channel, tags, message, self) => { if (self) return; // 比如用户发!rank触发排行榜 if (message.toLowerCase() === '!rank') { const leaderboard = await getFormattedLeaderboard(); client.say(channel, `📊 排行榜:${leaderboard}`); } });
额外注意
如果用户名称里可能包含单引号,记得转义避免字符串出错,把map里的部分改成:
`'${user.userName.replace(/'/g, "\\'")}' score: ${user.score}`
内容的提问来源于stack exchange,提问作者broken heart
相关产品推荐
相关产品推荐

