#node.js #database #mongodb #mongoose #discord.js
#node.js #База данных #mongodb #мангуст #discord.js
Вопрос:
Я подключаюсь к MongoDB через бота discordjs, но данные / база данных, похоже, не сохраняются. Я добавил IP-адрес, и у меня есть сообщение консоли, которое отображается при подключении к базе данных для подтверждения подключения.
базовая настройка вещей:
lass EconomyClient extends Client {
constructor() {
super();
this.discord = require("discord.js");
this.fs = require("fs");
this.path = require("path");
this.ms = require("ms");
this.mongoose = require("mongoose");
this.commands = new Collection();
this.timeouts = new Collection();
this.config = {
prefix: `h!`,
};
this.schema = this.mongoose.model(
`economy`,
new this.mongoose.Schema({
User: String,
Coins: Number
})
);
const self = this;
this.economy = {
async getBal(User) {
return await self.schema.findOne({ User }).then((d) => d ? d.Coins : 0);
},
async addBal(User, Coins) {
return await self.schema.findOne({ User }), async(err, data) => {
if(err) throw err;
if(data) {
data.Coins = Coins;
} else {
data = new self.schema({ User, Coins });
};
data.save();
}
}
}
}
и соединение…
start(token, path) {
this.commandHandler(path);
this.login(token);
this.mongoose.connect(
`mongodb srv://<dbUser>:<dbPassword>@cluster0.3esa7.mongodb.net/Data?retryWrites=trueamp;w=majority`,
{
useNewUrlParser: true,
useUnifiedTopology: true,
}
);
this.mongoose.connection.on("connected", () =>
console.log("DB connected ")
);
this.on("ready", () => console.log(`${this.user.tag} is now online!`));
this.on("message", async (message) => {
if (
message.author.bot ||
!message.guild ||
!message.content.toLowerCase().startsWith(this.config.prefix)
)
return;
Я создал команду ‘work’ для получения случайного количества монет и команду ‘getBalance’. Рабочая команда, похоже, работает — по крайней мере, она выбирает случайное число — но, похоже, она не сохраняет его в БД, поскольку команда getBalance всегда возвращается как ноль. Когда я захожу на вкладку collectios в моей учетной записи MongoDB, там ничего не отображается (предполагая, что это должно быть?).
Ответ №1:
В неправильном месте были круглые скобки —
было:
async addBal(User, Coins) {
return await self.schema.findOne({ User }), async(err, data) => {
if(err) throw err;
if(data) {
data.Coins = Coins;
} else {
data = new self.schema({ User, Coins });
};
data.save();
}
обратите внимание на последний параметр здесь: self.schema.findOne({ User })
должно было быть:
async addBal(User, Coins) {
return await self.schema.findOne({ User }, async(err, data) => {
if(err) throw err;
if(data) {
data.Coins = Coins;
} else {
data = new self.schema({ User, Coins });
};
data.save();
})
переместил paren в конец фрагмента.