javascript - 将 mongodb 集合项添加到不和谐嵌入
问题描述
我想使用 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);
}
解决方案
如果您查看 MongoDB 文档,您会看到它mongoDb.connect
返回一个 Promise。这意味着您的代码将连接到您的数据库,但它会在后台这样做。同时,它将继续处理您的其余代码,因此它将在添加所有字段之前发送嵌入。
您可以通过将message.channel.send
in 移至 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);
});
}
推荐阅读
- swift - 非字母数字字符集不起作用
- java - Java 类到 xml 视图
- elasticsearch - 单个字段可以在弹性搜索中使用“multi_match”进行多个查询吗?
- android - 来自我设备的 logcat 消息遗漏了一些行
- elasticsearch - 如何从多选查询变量中选择另一个值?
- r - 如何在 R 绘图函数中为某些组赋予某些颜色?
- java - 如何在 IntelliJ 中从 javafx 项目创建独立 jar
- javascript - 如何根据数组的值替换字符串的元素?
- reactjs - Heroku 未拾取 Laravel Mix 变量
- firebase - 在内部使用 Anmiation 时,FutureBuilder 未完成