как обновить элемент в списке внутри списка элементов в MongoDB?

#javascript #mongodb

Вопрос:

Я хочу добавить товар в список товаров в определенной корзине из списка тележек.

Для каждого пользователя предусмотрена отдельная корзина. (Я привязываю корзину к идентификатору пользователя). Внутри корзины есть множество товаров с указанием продукта и количества. Поэтому, когда пользователь хочет добавить товар в корзину, товар следует добавлять в корзину только тогда, когда его еще нет в корзине. в противном случае количество этого товара должно быть увеличено на 1 в массиве товаров этой конкретной корзины.

Я добавил комментарии для помощи. Я пробовал разные способы доступа к продукту, а затем его обновления, но ни один из них не работает. вот мой код

Вот модель тележки:

 import mongoose from 'mongoose';

const cartSchema = new mongoose.Schema({
    userId: {
        type: String,
        required: true,
    },
    products: [
        {
            productId: {
                type: String,
            },
            quantity: {
                type: Number,
                default: 1
            }
        }

    ]
    
}, {timestamps: true});
const Cart = new mongoose.model('Cart', cartSchema);

export default Cart;
 

а вот контроллер корзины, где я пытаюсь получить доступ к базе данных и обновить ее.

 import Cart from '../models/cart.js';

export const addToCart = async (req,res) =>{
    
    const item = req.body;
    itemid = item._id;
    const id = req.user.id; 

    try {
        const preCart = await Cart.findOne({id}) //To find if the user has any previous cart
        if(preCart) {

            const preItem = await Cart.findOne({"products.productId": itemid})//to find item if it exists already
            if(preItem){
               //here i want to update this preItem with the increment by 1

                const updatedItem = Cart.findByIdAndUpdate(id, {"products.productId": itemid} 
                 {quantity: quantity  }, {new: true})
               //its not working
            }else {
                //push the new item by updating the product array of that specific cart
            }
            
            console.log(updatedItem);
                    
              
        }else { //to create the cart if there is no
            const product = {productId: item._id, quantity: 1};
            newCart = await new Cart({userId: user.id, products: [product]}).save()
        }

        res.status(200).json(newCart)
    } catch (error) {
        
    }
}
 

thanks