Створення схеми
Коли у вас є вкладений масив, потрібно визначити окрему схему і використовувати її через властивість type
- джерело
- приклад:
import mongoose from 'mongoose'
const DetailProductSchema = new mongoose.Schema({
seller_id: {
type: String,
required: true
},
title: {
type: String,
required: true
},
price: {
type: Number,
required: true
},
stock: {
type: Number,
required: true
},
quantity: {
type: Number,
required: true
}
})
const CartSchema = new mongoose.Schema({
cartId: {
type: String,
required: true
},
detailProducts: {
type: [DetailProductSchema],
required: true,
},
},{
timestamps: true
})
const CartProduct = mongoose.model('Cart', CartSchema)
export default CartProduct
В цьому прикладі ми маємо схему CartSchema з масивом об'єктів, який називається DetailProductSchema. Ми передаємо цю схему через властивість type і на завершення експортуємо модель.
Зміна об'єкта в масиві
Тепер, щоб оновити існуючий продукт, потрібно використовувати метод save, а не інші методи, такі як findAndUpdate. (джерело).
Для оновлення масиву потрібно використовувати стандартний синтаксис, тому давайте використовувати методи масивів і потім .save()
Приклад:
import CartProduct from "../models/cart.models.js"
class CartProductRepository {
static async createProductCart(product, quantity, cartId) {
let cartSession = await CartProduct.findOne({ cartId })
console.log("Сесія існує, оновлюємо кошик")
const existingProductIndex = cartSession.detailProducts.findIndex(
(item) => item.seller_id === product.seller_id
)
let productInstance = cartSession.detailProducts.at(existingProductIndex)
console.log("Ми знайшли цей продукт: ", productInstance)
if (existingProductIndex === -1) {
console.log("Продукт не існує")
} else {
console.log("Оновлюємо продукт...")
productInstance.quantity += quantity
cartSession.detailProducts.splice(existingProductIndex, 1, productInstance )
return cartSession.save()
}
}
Перекладено з: [Nested array of objects in mongoose](https://medium.com/@virtualnautilus/nested-array-of-object-in-mongoose-67902f4b90d2)