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

MongoDB实现购物车商品条件更新与新增的方法咨询

商城购物车功能整合问题

您好,因使用翻译工具,表述可能不够自然,还请见谅。我刚接触编程,目前正在实现商城购物车功能。

当前购物车状态

let currentCart = [
  {
    id: "AAAAA",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 1",
    },
    quantity: 1,
  },
  {
    id: "AAAAA",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 2",
    },
    quantity: 1,
  },
];

用户尝试添加的新商品

let newCart = [
  {
    id: "AAAAA",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 1",
    },
    quantity: 1,
  },
  {
    id: "BBBBB",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 1",
    },
    quantity: 1,
  },
];

期望结果

let result = [
  {
    id: "AAAAA",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 1",
    },
    quantity: 2, // The cart that already exists adds quantity.
  },
  {
    id: "AAAAA",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 2",
    },
    quantity: 1,
  },
  {
    id: "BBBBB",
    option: {
      delivery: "pickup",
      date: "2023.01.06",
      request: "request 1",
    },
    quantity: 1, // Cart that doesn't exist will be newly added.
  },
];

现有实现代码(仅支持已有商品数量更新)

router.post("/addToCart", auth, async (req, res) => {
  const rootProductDoc = await Product.findOne({
    _id: req.body.productId,
  }).exec();

  User.findOne({ _id: req.user._id }, (err, result) => {
    let existingOptionStr = result.cart.map((cartItem) => {
      return JSON.stringify(cartItem.option);
    });

    let duplicateOption = req.body.option.filter((createdOption) => {
      return existingOptionStr.includes(JSON.stringify(createdOption));
    });

    if (duplicateOption) {
      for (let i = 0; i < duplicateOption.length; i++) {
        User.updateMany(
          { _id: req.user._id, "cart.option": duplicateOption[i] },
          {
            $inc: { "cart.$.quantity": 1 },
          },
          {
            new: true,
          },
          (err, result) => {
            if (err) {
              return res.status(400).json({ success: false, err });
            } else {
              return res.status(200).send(result.cart);
            }
          }
        );
      }
    }
  });
});

需要整合的新增商品代码

User.updateMany(
  {
    _id: req.user._id,
  },
  {
    $push: {
      cart: {
        rootProductDoc: rootProductDoc,
        id: rootProductDoc.id,
        quantity: 1,
        option: req.body.option,
      },
    },
  },
  {
    new: true,
  },
  (err, result) => {
    if (err) {
      return res.status(400).json({ success: false, err });
    } else {
      return res.status(200).send(result.cart);
    }
  }
);

请问如何整合代码以达成预期效果?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 01:35:37