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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:24:32