How to insert a value into an object property of an array?
P粉718730956
P粉718730956 2024-02-26 17:17:47
0
1
304

The problem is, I don't know if there's something wrong with the way I'm inserting the data in the post, or if the problem is with the HTML syntax of the object properties I'm trying to access the array.

This is my model and I want to insert a value in "cantidad" of the "MaterialesProductos" array.

const mongoose = require('mongoose')
const Schema = mongoose.Schema;
const bodyParser = require('body-parser')

const ProductoSchema = new Schema({

IdProducto:{type:String},
MaterialesProductos:[{nombre:{type:String},cantidad:{type:Number}}],
precio:{type:Number},
image:{type:String},
nombre:{type:String},
description:{type:String},

});

const Producto = mongoose.model('Producto',ProductoSchema);
module.exports = Producto;

This is my post, I use "req.body" to insert all the data. Always clear the array.

const Producto = require('../models/Productos.js')
const fileUpload = require('express-fileupload')
const path = require('path')

module.exports = (req,res)=>{
    console.log(req.body)
    

    let image = req.files.image;
    image.mv(path.resolve(__dirname,'..','public/img',image.name),async (error)=>{
    await Producto.create({
    ...req.body,
    image: '/img/' image.name

    
    })


    res.redirect('/AgregarProductos')
    })
    }

I've tried using MaterialesProductos[].cantidad or MaterialesProductos[][cantidad] etc. but I can't insert the value.

<div class="control-group">
                    <div class="form-group floating-label-form-group controls">
               <input type="button" name="abrirse" id="open" value="Agregar materiales">
                     <div id="popup" style="display: none;">

                        <div class="content-pop">
                            <div><a href="#" id="close">X</a></div>

                            <% for (var a = 0; a < materiales.length; a ) { %>
<div>
<%=materiales[a].Description%>
<input type="number" value="0" name="MaterialesProductos.cantidad" min="0">
</div>
                                <% } %>
                    </div>
                     </div>
                    </div>
                    </div>

P粉718730956
P粉718730956

reply all(1)
P粉563831052

Well, I did some research and didn't find a solution. So I have to do it manually.

Using MaterialesProductos[nombre] (can be anything), I use req.body.MaterialesProductos[nombre] to get the value in the array and I can access it. Using $push (I can't insert or create it, so I can only updateOne) I first create the document and then after updating it add an array containing the two objects.

Things like this:

const Producto = require('../models/Productos.js')
const fileUpload = require('express-fileupload')
const path = require('path')

module.exports = (req, res) => {
  let image = req.files.image;
  image.mv(path.resolve(__dirname, '..', 'public/img', image.name), async (error) => {
    await Producto.create({...req.body,
    image: '/img/' image.name
  })
  for (a=0; a

And it worked.

Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!