I'm struggling with the syntaxis to updateOne a specified value inside an object inside an array. This is my array of objects from my model
nombre:{type:String},
MaterialesProductos:[{Descripcion:{type:String},cantidad:{type:Number},codigo:{type:String},preciounitario:{type:Number},familia:{type:String}}]
This is how I insert values
await Producto.updateOne({nombre:req.body.ProductoAEditar}, { $push: {MaterialesProductos: {cantidad:req.body['MaterialesProductos[cantidad]'][a]}}});
But I would like to $set for example: Producto.updateOne({"name:req.body.nameOfTheDocument", {InThisObject:{WhereCode:req.body.code},$set:{value:req.body.NewValue}});
await Producto.updateOne({nombre:req.body.ProductoAEditar},{MaterialesProductos:{codigo:req.body['MaterialesProductos[codigo]'][a]},$set: {cantidad:req.body['MaterialesProductos[cantidad]'][a]}});
This is how my data looks in my mongo atlas
nombre:"Aaron",
MaterialesProductos: Array
0:Object
Descripcion:
"Angulo 1/8" x 1 1/4" de 6.10 mts. (1.50 kg/mt)"
cantidad:0
codigo:"AA-03"
preciounitario:260.84
familia:"Aceros"
CodePudding user response:
I think you want to use arrayfilters
:
db.collection.updateOne({
nombre: "Aaron"
},
{
$set: {
"MaterialesProductos.$[item]": {
Descripcion: "Angulo 1/8 x 1 1/4 de 6.10 mts. (1.50 kg/mt)",
cantidad: 7,
codigo: "AA-03",
preciounitario: 460.84,
familia: "Aceros"
}
}
},
{
arrayFilters: [
{
"item.codigo": "AA-03"
}
]
})
See how it works on the playground example