Поиск документа в пн goose и получение заданной части c - PullRequest
0 голосов
/ 04 мая 2020

Я начну с описания того, чего я пытаюсь достичь. В настоящее время я работаю над диссон-ботом для моего клана Destiny 2, одна из команд, которые я пытаюсь реализовать, - это команда joinid, в которой вы будете использовать команду и @ a user, и она вернет steamID пользователей. К сожалению, бот-дискорд не имеет доступа к соединениям пользователя-дискордера. Решение, которое я придумал, состояло в том, чтобы сделать Oauth2-вход для членов клана, когда они авторизируются, они авторизуют приложение для получения информации о соединении из API-интерфейса Discord, который затем сохраняется в базе данных. Приложение Oauth2 закончено и работает, проблемы заключаются в том, что бот извлекает данные из базы данных. До сих пор я пробовал Model.find только вчера, когда он возвращал безумное количество информации, намного превышающее фактический документ, однако сегодня он возвращает только [объект Object], поэтому я, должно быть, испортил код. Вероятно, стоит упомянуть, что это мой первый JavaScript проект.

Вот схема для документов MongoDB:

const UserSchema = new mongoose.Schema({
    discordId: {type: String, required: true},
    username: {type: String, required: true},
    connection: {type: Array, required: true}

});


const DiscordUser = module.exports = mongoose.model('User', UserSchema);

Я приложил изображения того, как документы выглядят в базе данных

И вот код команды, которую я имею до сих пор:

if (cmd.includes("joinid")) {
        playerid = cmd.slice(10, -1);
        const steamidentifier = DiscordUser.find({ discordId: playerid});
        console.log(`${steamidentifier}`);

    }

Глядя на изображение, вы видите, что для каждого соединения есть отдельные объекты (т.е. Spotify, battle. net, steam, twitch, et c. et c.) Но, насколько мне известно, steamID - это единственный идентификатор с 17 цифрами, состоящими только из цифр, поэтому я планировал использовать его для идентификации steamID. , Поэтому я спрашиваю, есть ли способ, во-первых, извлечь фактический документ из базы данных с помощью discordId, а затем, если есть способ легко выбрать фактический steamID из массива.

https://i.stack.imgur.com/JmeN3.png

1 Ответ

0 голосов
/ 04 мая 2020

Прежде всего, если вы ищете 1 документ, тогда я предлагаю вам использовать findOne().

Во-вторых, вам нужно использовать функцию callback, чтобы получить результаты вашего запрос.

if (cmd.includes("joinid")) {
    playerid = cmd.slice(10, -1);
    const steamidentifier = DiscordUser.findOne({
        discordId: playerid
    }, (err, res) => {
        console.log(res.connection.find(con => con.type === 'steam').id)
    });
}
...