#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