Обновите документ mongodb, если документ существует, иначе создайте - PullRequest
0 голосов
/ 13 марта 2019

Итак, я пытаюсь создать бот для разногласий для меня и моих друзей для отслеживания статистики в CS GO 10 мужчин, и я использую cheerio для веб-вырезки с сайта, который предоставляет нам статистику, а затем передаю их в mongodb.Функциональность утилизации работает нормально, но я пытаюсь выяснить, как избежать создания дубликатов документов для каждого пользователя.Если я ввожу * userid 857575, он извлекает статистику для этого пользователя и помещает в БД, но если я вызываю его несколько раз, он создает несколько документов в БД.Мой вопрос: как мне заставить mongodb обновить документ, если автор сообщения, находящийся в разногласии, совпадает с именем пользователя в БД?Поэтому, если имя пользователя bob отправляет * userid3939 и bob уже существует в базе данных, обновите документ.Если bob не существует, создайте документ.код ниже, ценим любые советы.

    module.exports.run = async (bot, message, args) => {


    console.log(args);
    var userUrl = 'https://popflash.site/user/' +args;
    console.log(userUrl);
    console.log(message.member.user.tag);


     rp(userUrl)
         .then(function (html) {
             const arr = [];
             var i = 0;

             $('.stat-container', html).each(function (key, value) {
                 arr[i++] = $(this).find(".stat").text();

             });



             const stats = new Stats({
                 _id: mongoose.Types.ObjectId(),
                 userName: message.member.user.tag,
                 userId: args,
                 HLTV: arr[0],
                 ADR: arr[1],
                 HS: arr[2],
                 W: arr[3],
                 L: arr[4],
                 T: arr[5],
                 win_percent: arr[6]
             });



             stats.save()
                 .then(function (result) {                   
                    let botembed = new Discord.RichEmbed()
                        .setDescription(message.member.user + "'s 10 Man stats")
                        .setColor("#15f153")
                        .addField("stats", result)                        

                         return message.channel.send(botembed);


                 })

         })

}

module.exports.help = {
    name: "userid"
}

1 Ответ

0 голосов
/ 13 марта 2019

Через db.collection.update вы можете указать опцию upsert: true, чтобы получить поведение, которое, я думаю, вам нужно.Он обновит существующую запись, если соответствует, в противном случае он создаст новую запись.

...