将mongodb集合项添加到不和谐嵌入

时间:2019-02-24 20:00:06

标签: javascript mongodb discord.js

我想使用MongoDB ForEach函数将集合文档添加到嵌入中。

当我想在foreach内的嵌入中添加字段时,它将发送嵌入,并跳过和添加字段。当我进行控制台登录时,似乎代码发送了消息,然后添加了字段。

     const Discord = require("discord.js");
    const mongoDb = require("mongodb").MongoClient;

    let showEmbed = new Discord.RichEmbed();
    let proccess = 0;

    module.exports.show = (message, page) => {


            mongoDb.connect('mongodb+srv://admin:31045@robot-xi9jt.gcp.mongodb.net/eco?retryWrites=true', {
                useNewUrlParser: true
            }, function (err, db) {
                if (err) console.log(err);
                let dbo = db.db("eco");
                dbo.collection("items").find({
                    itemPage: page
                }).forEach(function (doc) {
                    console.log(`${doc.itemName} : ${doc.itemPrice} :  ${doc.itemDescription}`)
                    showEmbed.addField(`**${doc.itemName}** | $${doc.itemPrice}`, doc.itemDescription, false);
                })
            });
message.channel.send(showEmbed);
        }

1 个答案:

答案 0 :(得分:2)

如果检查MongoDB文档,您将看到mongoDb.connect returns a Promise。意味着您将代码连接到数据库,但它将在后台连接。同时,它将继续您的其余代码,因此它将在添加所有字段之前发送嵌入内容。

您可以通过将message.channel.send移到Promise中来轻松解决此问题,

const Discord = require("discord.js");
const mongoDb = require("mongodb").MongoClient;

let showEmbed = new Discord.RichEmbed();
let proccess = 0;

module.exports.show = (message, page) => {
  mongoDb.connect('Your connect URL here', { useNewUrlParser: true }, function (err, db) {
    if (err) console.log(err);
    let dbo = db.db("eco");

    dbo.collection("items").find({
      itemPage: page
    }).forEach(function (doc) {
      console.log(`${doc.itemName} : ${doc.itemPrice} :  ${doc.itemDescription}`)
      showEmbed.addField(`**${doc.itemName}** | $${doc.itemPrice}`, doc.itemDescription, false);
    });

    message.channel.send(showEmbed);
  });
}