简体   繁体   中英

Using Mongoose FindoneAndUpdate In A For Loop

I'm making a Use command with Mongoose and Discordjs. It's all working fine but there is a problem with database.

When I try to use it, like .use box 5 it has to remove 5 boxes from database, but it only removes 1.

My code:

function random(min, max) {
  return Math.round(min + Math.random() * (max - min));
}
const profileModel = require("../../models/users")
const user = await profileModel.findOne({
  userID: message.author.id
})
if (!args[0]) return message.reply("WHAT THE HELL ARE YOU GOING TO USE :|")
let item = user.inventory.find(v => v.name.toLowerCase() === args[0].toLowerCase());
if (!item) {
  return message.channel.send("You Dont have That Item");
}
if (item.use === false) return message.reply("This Item Is Not Usable")

function runUpdate(obj) {
  return new Promise((resolve, reject) => {
    profileModel.findOneAndUpdate({
        userID: message.author.id
      }, {
        "$pull": {
          "inventory": obj
        }
      })
      .then(result => resolve())
      .catch(err => reject(err))
  });
};
itemusing = args[0].toLowerCase()
if (!args[1]) amount = 1
else amount = Math.floor(args[1])
console.log(amount)
if (itemusing === "box") {
  if (amount > 1) {
    for (let m = 0; m < amount + 2; m++) {
      console.log(m)
      runUpdate(item)
    }
    let newboxes = 0;
    let coins = 0;
    for (let i = 0; i < amount; i++) {
      const rnd = random(1, 10)
      if (rnd <= 6) abox = false
      else abox = true
      const amountrnd = random(1000, 5000)
      if (abox === true) {
        newboxes += 1
        coins += amountrnd
      } else {
        coins += amountrnd

      }
    }
    if (newboxes >= 1) {
      await profileModel.findOneAndUpdate({
        userID: message.author.id
      }, {
        "$inc": {
          "coins": coins
        }
      });
      await message.reply(`You Found These In ${amount} Box(s):\n\n${coins} Coins\n${newboxes} Boxes`)
    } else {
      message.reply(`You Found These In ${amount} Box(s):\n\n${coins} Coins`)
      await profileModel.updateOne({
        userID: message.author.id
      }, {
        "$inc": {
          "coins": coins
        }
      });
    }
  } else {
    message.reply("Soon")
  }
}

There is no error by the way. Also I've embedded some screenshots of when I use the command:

使用命令

使用命令后的库存

I had 46 before I used the command; after using (5) boxes I have 45.

Try this:

profileModel.findOneAndUpdate({ userID: message.author.id },{"$pull": { "inventory": obj } },{returnNewDocument: true})

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM