Я создал такие модели, как
- Product.
- Корзина содержит массив ProductIds и их количество.
- Модель пользователя содержит CartId.
const cartSchema = new Schema({
user_id : {
type: Schema.Types.ObjectId,
required: true
},
products: {
items: [{product_id : {
type: Schema.Types.ObjectId,
requied: true,
ref: 'Product',
default: []
}, qnty: {
type: Number,
requied: true,
default: 0`enter code here`
}}]
}
});
const userSchema = new Schema({
name: {
type: String,
required: true,
},
cart: {
type: Schema.Types.ObjectId,
ref: "Cart",
default: null,
},
});
Я собираюсь добавить информацию о продукте в документ корзины, который хранится в модели пользователя. Я написал определенные пользователем методы в классе модели, как показано ниже, но это не удается.
Метод addProductToCart в пользовательской модели
userSchema.methods.addProductToCart = function(product){
console.log('User::addProductToCart this.cart', this.cart);
if(this.cart === null) {
this.cart = new Cart ({user_id: this._id, products: {items: [], quantity: 0}});
}
console.log('User2::addProductToCart this.cart', this.cart);
//this.cart.save();
return this.cart.addProductToCart(product);
};
Метод addProductToCart в корзине
cartSchema.methods.addProductToCart = function (rcvproduct) {
console.log('Cart1::addProductToCart rcvproduct:', rcvproduct);
//Issue point
const productIndex = this.products.items.findIndex(productObj =>{
return productObj.product_id.toString() === rcvproduct._id.toString();
});
console.log('Cart2::addProductToCart productIndex:', productIndex);
let newQuantity = 1;
const updatedItems = [...this.products.items];
if (productIndex >= 0) {
newQuantity = this.products.items[productIndex].quantity + 1;
updatedItems[cartProductIndex].quantity = newQuantity;
} else {
updatedItems.push({
product_id: rcvproduct._id,
quantity: newQuantity
});
}
console.log('Cart3::addProductToCart updatedItems:', updatedItems);
const updatedProducts = {
items: updatedItems
};
console.log('Cart4::addProductToCart updatedProducts:', updatedProducts);
this.products = updatedProducts;
return this.save();
console.log('Cart5::addProductToCart this.products:', this.products);
console.log('Cart6::addProductToCart this:', this);
};
O / P:
Добавить продукт в первый раз:
POST /addproducttocart
Valid Token
/addproducttocart
rcvProduct_id: *5f06861a4555e524bc6fd687*
User::addProductToCart this.cart null
User2::addProductToCart this.cart {
products: { default: [], items: [] },
_id: 5f0977f60b913d2990c953fe,
user_id: 5f0945c015841d0ebceb91de
}
Cart1::addProductToCart rcvproduct: [
{
discount: 0,
available_stock: 0,
_id: *5f06861a4555e524bc6fd687*,
category_id: 5f067b6fdc2bb538d4522903,
subcategory_id: 5f0683ea4555e524bc6fd673,
name: 'productA',
product_type: 0,
weight: 1000,
price: 46,
description: 'Rich in fat contents & also increases immunity',
__v: 0
}
]
Cart2::addProductToCart productIndex: -1
Добавить тот же продукт во второй раз:
POST /addproducttocart
Valid Token
/addproducttocart
rcvProduct_id: *5f06861a4555e524bc6fd687*
User::addProductToCart this.cart null
User2::addProductToCart this.cart {
products: { default: [], items: [] },
_id: 5f0977f60b913d2990c953fe,
user_id: 5f0945c015841d0ebceb91de
}
Cart1::addProductToCart rcvproduct: [
{
discount: 0,
available_stock: 0,
_id: *5f06861a4555e524bc6fd687*,
category_id: 5f067b6fdc2bb538d4522903,
subcategory_id: 5f0683ea4555e524bc6fd673,
name: 'productA',
product_type: 0,
weight: 1000,
price: 46,
description: 'Rich in fat contents & also increases immunity',
__v: 0
}
]
Cart2::addProductToCart productIndex: -1
Я новичок в mon goose ODM. Может ли кто-нибудь помочь мне определить существующий product_id в массиве Cart.products.items.