繁体   English   中英

无法使用mongoose将对象添加到mongodb中的数组中?

[英]Unable to add objects into an array in mongodb using mongoose?

我正在使用nodejs和mongodb创建一个复制,我有这个:

var mongoose = require('mongoose');
var db = mongoose.connect("mongodb://localhost/dbTienda");

var esquemaUsuarios = new mongoose.Schema({
nombre: String,
apellido: String,
email: String,
contrasena: String,
notificaciones: Number,
notificacionesLista: [String],
articulos_vendidos: Number,
productos: [{
    nombre: String,
    imgPath: String,
    precio: Number,
    ciudades: [String],
    tags:  [String],
    descripcion: String
}]
}), usuarios = db.model("Usuarios",esquemaUsuarios);

问题是我无法在productos中添加任何内容,我的想法是制作这样的内容

productos: {
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX},
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX},
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX},
{nombre:XXXXX,imgepath:XXXXX,precio:XXXXX,ciudades:{ XXXXX },tags:{ XXXXX },descripcion: XXXXX}
}

我想添加许多对象,例如,第一个对象可能是celphone,第二个对象是电视……等等。我什么也不能添加,我正在使用:

mongoose.model('Usuarios').update({
productos:[{$pushAll:{
    nombre: informacion.pNombre,
    imgPath: informacion.pImagen,
    precio: informacion.pPrecio,
    ciudades: informacion.pCiudades,
    tags: informacion.pTags,
    descripcion: informacion.pDescripcion
}},{upsert:true}]
});

但这不起作用! 我可以编辑nombre apellido电子邮件...等,但是我不能使用productos。

这里的问题在于.update()方法的使用,而您要使用的实际运算符是$push

update方法将其第一个参数作为查询来“查找”您要更新的文档,第二个参数是实际的update语句。 因此,在您的情况下:

mongoose.model('Usuarios').update(
    { /* query to match document(s) */ },
    {
        "$push": {
            nombre: informacion.pNombre,
            imgPath: informacion.pImagen,
            precio: informacion.pPrecio,
            ciudades: informacion.pCiudades,
            tags: informacion.pTags,
            descripcion: informacion.pDescripcion
        }
    },
    { upsert:true },
    function(err,numAffected) {

    }
);

如果您的“查询”条件实际上与集合中的任何文档都不匹配,那么您为upsert设置的“选项”将创建一个“新”文档。

如果您不打算更新多个文档,则可能更适合使用.findOneAndUpdate().findByIdAndUpdate()方法。

仅作说明,在最近的MongoDB版本中实际上不推荐使用$pushAll运算符,首选方式是将$each修饰符与$push结合使用。 这是因为此功能也以相同的方式与$addToSet运算符共享。 预期用途是一次添加“多个”数组项。

恕我直言,您需要为“ productos”定义单独的架构,并通过在“ esquemaUsuarios”中引用存储它们,这将为您提供更大的灵活性,并在您需要共享同一产品时节省数据库存储

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM