无法使用mongoose将对象添加到MongoDB中的数组中?
我正在创build一个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} }
我想添加许多对象,例如第一个对象也许是一个电话,第二个电视…等我不能添加任何东西,我用这个:
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方法将第一个参数作为查询来查找要更新的文档,第二个参数是实际的更新语句。 所以在你的情况下:
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
设置的“选项”将创build一个“新”文档。
如果您的目的不是更新多个文档,那么您的使用可能更适合.findOneAndUpdate()
或.findByIdAndUpdate()
方法。
注意, $pushAll
操作符在MongoDB的最新版本中已经被弃用了,最好的方法是使用$each
修饰符和$push
。 这是因为这个function也以同样的方式与$addToSet
操作符共享。 预期用途是一次添加“多个”数组项目。
你需要为'productos'定义单独的模式,并通过引用将它们存储在'esquemaUsuarios'中,当你需要共享相同的产品时,它会给你更多的灵活性和节省数据库的存储空间