'Why data.wallet keeps sending 0 value?

I was creating a coinflip for my casino system, but it's not working than what I expected. Did I missed something?
But in my other commands, it's working fine just this one not working because its similar to all of my work in my commands. But this one keep throwing me with 0 balance which is it should 1e9 it parseFloat

        if(!args[0]) {             
          const embed = new MessageEmbed()             
         .setTitle("Casino Coinflip")             
         .setDescription("You need to choose head | tail\ then \<amount\>")
         .setColor('RANDOM')
         .setTimestamp()

            message.channel.send({embeds: [embed]})
        } else if(args[0] === 'heads' || args[0] === 'heads' || args[0] === "h") {
            const exist = await economy.findOne({
                guildID: message.guild.id
            })
    
            if(!exist) return message.reply("You don't have records yet to gamble")
    
            const amount = parseFloat(args[1])
            if(amount > exist.wallet) return message.reply(`You dont have enough balance, your current balance is $${exist.wallet.toLocaleString()}`)
            let RN = Math.floor(Math.random() * 100) + 1
            if(RN > 50) {
                economy.findOneAndUpdate({
                    guildID: message.guild.id
                }, {$inc: {wallet: amount}}, async(err, data) => {
                    data.wallet += amount
                    data.save()
                    message.channel.send(`You bet for ${args[0]} and won $${amount.toLocaleString()}!`)
                })
            } else {
                economy.findOneAndUpdate({
                    guildID: message.guild.id
                }, {$inc: {wallet: amount}}, async(err, data) => {
                    data.wallet -= amount
                    data.save()
                    message.channel.send(`You bet for ${args[0]} and lost ${amount.toLocaleString()}!`)
                })
            }
        } else if(args[0] === "tails" || args[0] === "tail" || args[0] === "t") {
            const exist = await economy.findOne({
                guildID: message.guild.id
            })
    
            if(!exist) return message.reply("You don't have records yet to gamble")
    
            const amount = parseFloat(args[1])
            if(amount > exist.wallet) return message.reply(`You dont have enough balance, your current balance is $${exist.wallet.toLocaleString()}`)
            let RN = Math.floor(Math.random() * 100) + 1
            if(RN > 50) {
                economy.findOneAndUpdate({
                    guildID: message.guild.id
                }, {$inc: {wallet: amount}}, async(err, data) => {
                    data.wallet += amount
                    data.save()
                    message.channel.send(`You bet for ${args[0]} and won $${amount.toLocaleString()}!`)
                })
            } else {
                economy.findOneAndUpdate({
                    guildID: message.guild.id
                }, {$inc: {wallet: amount}}, async(err, data) => {
                    data.wallet -= amount
                    data.save()
                    message.channel.send(`You bet for ${args[0]} and lost ${amount.toLocaleString()}!`)
                })
            }
        }`


Solution 1:[1]

You only forgot one code line which is the author you need to find into the data base,

userID: message.author.id //this will be the author who using the command

or whatever you put on your schema, might be userID, userId, memberID, memberId

If you didn't put the message.author.id on your findOne it will only picked the first data on your database, that's why you keep getting 0 balance even you have balance on your database.

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1