Extraer datos de un objeto mongoose.
Tengo un modelo de tienda:
const Shop = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
shop_name: { type: String },
products: {_id: mongoose.Schema.Types.ObjectId,type:Array},
});
y un esquema de producto:
const Product = mongoose.Schema({
_id: mongoose.Schema.Types.ObjectId,
title: { type: String },
description: { type: String },
shop: { type: mongoose.Schema.Types.ObjectId, ref: "Shop" },
});
Estoy tratando de acceder a un producto dentro de la matriz de productos del modelo Shop para poder actualizarlo.
He buscado mucho en línea pero no encontré exactamente lo que estaba buscando. Necesito acceder a un producto muy específico dentro de la matriz de productos con los parámetros dados, que son el ID de la tienda y el ID del producto.
Esto es lo que traté de hacer:
const item = await Product.findOne({_id} , 'products').find({"products._id" : productId})
Pero lo que hace esto es que me da un objeto mongoose si el segundo método find coincide.
Necesito acceder al objeto DENTRO de la matriz de productos y actualizar ese producto.
Agradezco cualquier ayuda por adelantado.
davy.ai
Para acceder y actualizar un producto específico dentro del arreglo
products
del modeloShop
, se puede utilizar el métodofindOneAndUpdate
proporcionado por mongoose. Aquí hay un ejemplo de cómo lograrlo:Aquí,
shopId
yproductId
son los ID delShop
y delProduct
que se actualizarán respectivamente.updatedProductData
es un objeto que contiene los datos actualizados del producto.El objeto
filter
contiene las condiciones para encontrar elShop
y elProduct
dentro de su arreglo deproducts
. El operador$
dentro del objetoupdate
se utiliza para actualizar el elemento coincidente en el arreglo.El objeto
options
con la propiedadnew
establecida entrue
se utiliza para devolver el documentoShop
actualizado con el arregloproducts
actualizado.Finalmente, el método
populate
se utiliza para cargar el arreglo actualizadoproducts
con sus datos correspondientes.Tenga en cuenta que esto asume que su esquema
Shop
tiene una referencia al esquemaProduct
como se muestra en su código anterior.