[英]update products with the same id
我的产品可以选择尺寸,所以如果我将“X”产品添加到尺寸为 4 和 5 的购物车中,它将向购物车中添加 2 件商品,如下所示:
我的目标是当您成功从购物车中购买商品时,您刚购买的尺寸将从产品主页中删除。
仅当我尝试购买 2 种不同的物品时,它才有效。 如果我要尝试购买 2 件不同尺寸的相同商品,则只会过滤第一个尺寸的商品,我会收到此错误:
(node:21336) UnhandledPromiseRejectionWarning: VersionError: No matching document found for id "62bee4ce92e7c57a195686ae" version 0 modifiedPaths "size"
这是成功购买代码:
createOrder: async (_, {}, context) => {
const userAuth = await auth(context);
const cart = await Cart.findOne({ userId: userAuth._id });
cart.cartProducts.forEach(async (p) => { // Here's the filtering product functionallity
const products = await Product.findById(p.productId);
if (products) {
products.size = products.size.filter((s) => s !== +p.size);
}
await products.save();
});
if (!cart) {
throw new UserInputError('No available order!');
}
const newOrder = new Order({
orderProducts: cart.cartProducts,
purchasedBy: userAuth._id,
datePurchased: new Date().toISOString(),
});
await newOrder.save();
return newOrder;
},
正如我所说,它只有在您将 2 个不同的商品添加到您的购物车时才有效。
编辑:
现在我得到 product.save 不是一个函数
const userAuth = await auth(context);
const cart = await Cart.findOne({ userId: userAuth._id });
const products = await Product.find({
_id: cart.cartProducts.map((c) => c.productId),
});
cart.cartProducts.forEach(async (p) => {
if (products) {
products.map((product) => {
return (product.size = product.size.filter(
(size) => size !== +p.size
));
});
}
});
await products.save();
问题是您正在使用findById它将返回第一个匹配的文档。 这就是为什么当您在购物车中添加不同尺寸的相同产品时。 它将始终选择产品的第一个匹配 id。 您可以尝试使用 find 运算符,因为它返回匹配条件的列表。
Product.find({_id:p.productId});
它将返回所有产品,而不是仅匹配第一个产品。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.