You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Node.js+MongoDB用户卡片库存添加逻辑问题排查

Discord Bot卡片库存更新问题排查与修复

核心问题分析

你的代码存在几个关键逻辑错误,导致MongoDB的cards数组始终为空:

  • 查询范围错误:findOne({newCard})未指定当前用户的userId,会遍历整个集合查找是否有用户持有该卡片,而非检查当前用户的库存。
  • 更新语法错误:
    • updateOne的第一个参数是查询条件,第二个才是更新操作,你在新增卡片分支里把更新逻辑直接放在了第一个参数位置,不符合Mongoose API规范。
    • $push里错误使用cards.$.idolname这类语法,新增数组元素直接写字段名即可;同时把group写成了groupp,与Schema定义的字段名不匹配,qty用了字符串'1',但Schema里是Number类型。
  • 异步操作未处理:updateOne是异步函数,未加await可能导致操作未执行就结束,也无法捕获潜在错误。
  • 数组元素匹配逻辑错误:检查用户是否持有卡片,应在当前用户的cards数组内匹配code,而非用顶级查询条件。

修正后的代码

// 假设已从Discord交互中获取当前用户ID,根据实际场景替换
const userId = interaction.user.id;

// 从本地JSON抽取的随机卡片数据
const { idolname, group, era, rarity, code, image } = cards ?? {};

try {
    // 尝试更新已有卡片:定位当前用户+对应code的卡片,增加数量
    const updateResult = await UserProfile.updateOne(
        { userId, "cards.code": code },
        { $inc: { "cards.$.qty": 1 } }
    );

    // 若未匹配到文档(用户未持有该卡片),则新增卡片到数组
    if (updateResult.matchedCount === 0) {
        await UserProfile.updateOne(
            { userId },
            { 
                $push: { 
                    cards: {
                        idolname,
                        group,
                        era,
                        rarity: Number(rarity), // 确保类型符合Schema定义
                        code,
                        image,
                        qty: 1 // 数字类型,避免Schema校验失败
                    }
                }
            },
            { upsert: true } // 可选:若用户档案不存在则自动创建
        );
    }
} catch (error) {
    console.error("卡片库存更新失败:", error);
    // 可在此添加Discord消息提示用户操作失败
}

关键优化说明

  • 精准定位用户:所有操作基于userId查询,确保只修改当前用户的档案。
  • 利用MongoDB数组语法:用"cards.code": code匹配数组内元素,结合$操作符定位到具体元素执行$inc操作。
  • 异步与错误处理:添加try/catch捕获异常,用await确保异步操作完成,通过matchedCount判断是否需要新增卡片。
  • 字段匹配Schema:修正字段名错误,确保qty为数字类型,避免Schema校验失败。

额外检查点

  1. 打印console.log(cards)验证是否从本地JSON文件获取到了正确的卡片数据。
  2. 确认用户的UserProfile文档已存在,或开启upsert: true自动创建新文档。
  3. 检查Mongoose连接状态,确保Bot已成功连接MongoDB。

内容的提问来源于stack exchange,提问作者eggosbae

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 13:40:57