首页 > 解决方案 > 如何在嵌入(discord.js)中映射来自猫鼬数据库的数据

问题描述

问题

下面的代码将数据库中的数据映射到MessageEmbed.description. 我想将每个数据映射到MessageEmbed.fields. 我尝试使用for()循环,但我想简要了解如何做到这一点,因为我使用了 2 个侦听器:- w(数据内容)和i(数据在 db 中的位置)。

我的代码

await db.findOne({ guildid: message.guild.id, user: member.user.id }, async(err, data) =>{
            if(err) throw err;
            if(data) {
                
                const embed = new Discord.MessageEmbed()
                    .setTitle(`${message.author.tag}`)
                    .setDescription(
                        data.content.map(
                            (w, i) => 
                            `\`${i + 1}\` | **${w.data1}**\n**${w.data2}**`
                        )
                    )                   
                    .setFooter(`Total : ${data.content.length}`)
                    
                message.channel.send(embed)
            } else {
                message.channel.send('No data found')
            }
        });

for() 循环 [我的尝试]

for(w, i of data.content){
   embed.addField(`${i + 1}`, `${w.data1}\n${w.data2}`, true)
};

但是,这导致了错误。

标签: mongodbdiscord.js

解决方案


您可以使用.forEach()which 将产生当前元素以及当前索引:

data.content.forEach((w, i) => {
    embed.addField(`${i + 1}`, `${w.data1}\n${w.data2}`, true);
});

如果要坚持for循环,请使用for .. in获取索引:

for (let i in data.content){
   let w = data.content[i];
   embed.addField(`${i + 1}`, `${w.data1}\n${w.data2}`, true);
}

不过我不推荐后者。


推荐阅读