Soy nuevo en mangosta ODM. Estoy tratando de incrementar un valor por el valor de otro campo. Lo siguiente es lo que he intentado:
const deletedCartItem = await Cart.findOneAndUpdate( { sessionId: req.session.sessionId, "productInfo.productId": product_id }, { $inc: { checkoutAmount: "$productInfo.totalAmount"//totalAmount is a nested field here. }, $pull: { productInfo: { productId: product_id }, }, }, { new: true, useFindAndModify: false } );El esquema de mi colección se ve así:
const cartSchema = mongoose.Schema({ sessionId: { type: String, unique: true, }, checkoutAmount: { type: Number, }, orderStatus: { type: String, default: "INCART" }, productInfo: [ { productId: { type: String, required: true, unique: true, }, quantity: { type: Number, required: true, }, price: { type: Number, }, totalAmount: { type: Number, } } ], }); El error que estoy recibiendo es - 
Me estoy perdiendo de algo ? Gracias por adelantado !
La actualización no puede permitir usar el valor del campo interno en otros campos, debe ir con la actualización con canalización de agregación a partir de MongoDB 4.2,
$reduce para iterar el aspecto de productInfo y verificar la condición si productId coincide y luego devolver su totalAmount ,$add para incrementar el checkoutAmount con el totalAmount devuelto desde arriba $reduce operación$filter para iterar el bucle de productInfo y filtrar los elementos que no tienen un productId de producto coincidente const deletedCartItem = await Cart.findOneAndUpdate( { sessionId: req.session.sessionId, "productInfo.productId": product_id }, [{ $set: { checkoutAmount: { $add: [ "$checkoutAmount", { $reduce: { input: "$productInfo", initialValue: 0, in: { $cond: [ { $eq: ["$$this.productId", product_id] }, "$$this.totalAmount", "$$value" ] } } } ] }, productInfo: { $filter: { input: "$productInfo", cond: { $ne: ["$$this.productId", product_id] } } } } }], { new: true, useFindAndModify: false } );