Mongo db 没有更新我的个人资料,我已经尝试过 markModified

问题描述 投票:0回答:1

您好,我遇到了这个问题,我的个人资料没有更新,所以当我在不和谐中使用该功能时,它只是垃圾邮件,我尝试将任务标记为已修改,但这也不起作用,我可以尝试其他任何事情吗?它很好地找到了配置文件,并在我登录时进行了更改,但当需要更新时,它只是忘记了所有内容并且不更新

    async function reward(userID, task, interaction) {
  try {
    let profile = await profileModel.findOne({ user: userID });

    let profileTaskIndex = profile.tasks.findIndex((v) => v.name === task.name);
    if (profileTaskIndex === -1) return;

    profile.tasks.splice(profileTaskIndex, 1);

    if (task.rewardType === "item") {
      let found = items.find((v) => v.name === task.reward);
      if (!found) return;
      profile = await giveItem(userID, task.reward, profile);
    } else if (task.rewardType === "coins") profile.coins += task.reward;

    profile.markModified("tasks");
    await profile.save();
  } catch (error) {
    console.log(error);
  }
}
javascript mongodb mongoose
1个回答
0
投票

主要问题可能是您正在就地修改配置文件对象,而没有确保 Mongoose 完全跟踪其更改。 尝试下面的代码,让我知道它是否解决了您的疑问:


    async function reward(userID, task, interaction) {
      try {
        let profile = await profileModel.findOne({ user: userID });
    
        let profileTaskIndex = profile.tasks.findIndex((v) => v.name === task.name);
        if (profileTaskIndex === -1) return;  // Exit if task not found
    
        profile.tasks.splice(profileTaskIndex, 1);
    
        if (task.rewardType === "item") {
          let found = items.find((v) => v.name === task.reward);
          if (!found) return;
          profile = await giveItem(userID, task.reward, profile);
        } else if (task.rewardType === "coins") {
          profile.coins += task.reward;  // Add coins reward
        }
    
        profile.markModified("tasks");
    
        await profile.save();
    
      } catch (error) {
        console.log(error);
      }
    }

我希望这能解决您的疑问。

© www.soinside.com 2019 - 2024. All rights reserved.