首页 > 解决方案 > 如何循环然后保存产品?

问题描述

下午好,我正在尝试循环更改猫鼬中产品的其余部分。但坚持是行不通的。我将不胜感激您的帮助!


const statusOutOfStock = await ProductStockStatus.findOne({
                color: 'danger',
            })

            for await (const product of Product.find()) {
                const orderItems = order.orderItems.filter(
                    item => String(item.product) === String(product._id)
                )

                if (orderItems?.length > 0) {
                    orderItems.forEach(async orderItem => {
                        if (orderItem.varIdx === 0 && product.stock !== null) {
                            const stockResult = product.stock - orderItem.count
                            product.stock = stockResult
                            if (stockResult === 0) product.status = statusOutOfStock._id
                        } else {
                            const stockResult =
                                product.variations[orderItem.varIdx].stock - orderItem.count
                            product.variations[orderItem.varIdx].stock = stockResult
                            if (stockResult === 0)
                                product.variations[orderItem.varIdx].status = statusOutOfStock
                        }
                    })
                    await product.save()
                }
            }

标签: javascriptnode.jsmongodbmongoose

解决方案


我能够解决这个问题。

/* Deduction of stock */
            const statusOutOfStock = await ProductStockStatus.findOne({
                color: 'danger',
            })

            for await (const product of Product.find()) {
                /* Get order items by productID */
                const orderItems = order.orderItems.filter(
                    item => String(item.product) === String(product._id)
                )

                /* If order items exists */
                if (orderItems?.length > 0) {
                    /* Run of order items and write new stock */
                    const proDb = await Product.findById(product._id)
                    let buffer = []
                    await Promise.all(
                        orderItems.map(async orderItem => {
                            if (orderItem.varIdx === 0 && product?.stock !== null) {
                                const stockResult = product.stock - orderItem.count
                                proDb.stock = stockResult < 0 ? 0 : stockResult
                                if (stockResult === 0) proDb.status = statusOutOfStock._id
                            } else if (
                                !!product?.variations[orderItem.varIdx]?.stock !== null &&
                                orderItem.varIdx !== 0
                            ) {
                                const stockResult =
                                    product.variations[orderItem.varIdx].stock - orderItem.count

                                if (buffer?.length === 0) buffer = [...product.variations]

                                buffer[orderItem.varIdx].stock =
                                    stockResult < 0 ? 0 : stockResult

                                proDb.variations = buffer

                                if (stockResult === 0)
                                    proDb.variations[orderItem.varIdx].status = statusOutOfStock
                            }
                        })
                    )
                    await proDb.save()
                }
            }


推荐阅读