首页 > 解决方案 > Foreach 文件猫鼬

问题描述

我正在尝试遍历 mongodb 集合中的所有文档。

这就是我所拥有的。

module.exports = {
    name: `store`,
    aliases:['shop'],

    /**
     * @param {Client} client
     * @param {Message} message
     * @param {String[]} args
     */
run: async(client, message, args) => {
    
    const exampleEmbed = new Discord.MessageEmbed()
    .setColor('#0099ff')
    .setTitle('Boblox Shop')
    .setDescription('Buy stuff with $buy <id>')
    const items = require('./shop')

    items.find({}).then(function(documents) {
      
        documents.forEach(function(u) {
            exampleEmbed.addField(`${u.ItemName}`, `Price: ${u.Price}`)

        });
    })

    .setTimestamp()
}
}

商店是一种模式。这是商店的代码

const mongoose = require("mongoose")

const commandsRan = mongoose.Schema({
    ItemName:String,
    Price:Number,
    Stock:Number,
    Rarity:String,
    Description:String,
    Emoji:String

})

module.exports = mongoose.model("Shop", commandsRan, 'shopitems')

当我运行代码商店命令时,我收到此错误:TypeError: items.find(...).then(...).setFooter is not a function

如何遍历集合中的每个文档并将字段添加到嵌入?

标签: mongodbmongoosediscord.js

解决方案


因此,首先,我意识到您的代码片段不是您正在运行的确切代码,因为抛出的错误提到了 ...setFooter 的错误,并且代码片段中甚至没有提到函数 setFooter 。还有一个杂散的 setTimestamp 函数,在 的末尾items.find(),您可以将其移动到嵌入的末尾。

module.exports = {
  name: `store`,
  aliases:['shop'],

  /**
   * @param {Client} client
   * @param {Message} message
   * @param {String[]} args
   */
  run: async(client, message, args) => {

    const exampleEmbed = new Discord.MessageEmbed()
    .setColor('#0099ff')
    .setTitle('Boblox Shop')
    .setDescription('Buy stuff with $buy <id>')
    .setTimestamp();

    const items = require('./shop');

    items.find({}).then(function(documents) {
      documents.forEach(function(u) {
        exampleEmbed.addField(`${u.ItemName}`, `Price: ${u.Price}`);
      });
    })
  }
}

我通常只是重新格式化代码,并将函数转移setTimestamp到 MessageEmbed 构造函数的末尾,items.find 应该没有任何问题。


推荐阅读