бот discord не сохраняет в MongoDB

#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 в конец фрагмента.