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

Mongoose调用document.updateOne()更新时points、earnings字段不生效问题

问题定位与修复方案

故障原因

你代码的更新参数中重复声明了$inc操作符作为对象键:JavaScript 普通对象中如果出现重复的键名,后定义的键值会直接覆盖前面的所有同名键值。因此你写的三个$inc配置,只有最后一个$inc: { balance: xx }会生效,points和earnings的增量规则直接被覆盖丢失,自然不会更新。

另外你额外添加的referer: partner.referer、grandReferer: ref.referer属于冗余逻辑,你本身就是通过对应referer条件查询出来的文档,不需要再主动赋值该字段,额外写入反而可能意外覆盖该字段的原有值,建议直接删除。

修正后的代码

const username = req.params.username;
try {
  const partner = await Partner.findOne({ username });
  await partner.updateOne({ isApproved: true });
  const ref = await Partner.findOne({ username: partner.referer });
  if (ref) {
    // 合并$inc的所有字段到同一个对象内
    await ref.updateOne(
      {
        $inc: { points: 10, earnings: 10, balance: 10 },
        $push: { downlines: partner.username },
      },
      { new: true }
    );
    const grandRef = await Partner.findOne({ username: ref.referer });
    if (!grandRef) {
      res
        .status(200)
        .json(
          'Partner approval was successfull with a referrer but no grand referrer'
        );
    } else {
      // 同样合并$inc的所有字段
      await grandRef.updateOne(
        {
          $inc: { points: 3, earnings: 3, balance: 3 },
          $push: { grandDownlines: partner.username },
        },
        { new: true }
      );
      res
        .status(200)
        .json(
          'Partner approval was successfull with both referrer and grand referrer'
        );
    }
  } else {
    res
      .status(200)
      .json(
        'Partner approval was successfull without a referrer or a grand referrer'
      );
  }
} catch (err) {
  res.status(500).json('Something went wrong');
  console.log(err);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:45:01