Home > database >  How should I updateOne a value inside an object inside an array?
How should I updateOne a value inside an object inside an array?

Time:01-21

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

  • Related