mongodb 如何向数组的对象属性插入值?

9wbgstp7  于 2023-01-01  发布在  Go
关注(0)|答案(1)|浏览(258)

问题是,我不知道是我在帖子中插入数据的方式出了问题,还是我试图访问数组的对象属性的HTML语法出了问题。
这是我的模型,我想在“MaterialesProductos”数组的“candad”中插入一个值。

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},
descripcion:{type:String},

});

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

这是我的帖子,我用“req.body”插入所有数据。总是让数组为空。

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')
    })
    }

我已经尝试过MaterialesProductos[]. candad或MaterialesProductos[][candad]等,但我就是不能插入值。

<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].Descripcion%>
<input type="number" value="0" name="MaterialesProductos.cantidad" min="0">
</div>
                                <% } %>
                    </div>
                     </div>
                    </div>
                    </div>
lnvxswe2

lnvxswe21#

嗯,我研究了一下,没有找到解决办法。所以我只能手动操作。
使用MaterialesProductos[nombre](可以是任何值),我可以使用req.body.MaterialesProductos[nombre]获取数组中的值,我可以访问它。使用$push(我不能插入或创建它,所以我只能使用updateOne),我首先创建文档,然后更新它,添加包含两个对象的数组。
大概是这样的

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<req.body['MaterialesProductos[cantidad]'].length;a++) {
    if (req.body['MaterialesProductos[cantidad]'][a]!=='0') {
      await Producto.updateOne({
        nombre: req.body.nombre
      },{
        $push: {
          MaterialesProductos: {
            nombre: req.body['MaterialesProductos[nombre]'][a],
            cantidad: req.body['MaterialesProductos[cantidad]'][a]
          }
        }
      })
    }
  }
  res.redirect('/AgregarProductos')
 })
}

而且工作。

相关问题