[英]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.