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
相关产品推荐
相关产品推荐

