2014-06-08 90 views
1

我創建的NodeJS與和MongoDB的aplication,我有這樣的:無法使用貓鼬在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。

回答

2

這裏的問題與.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將創建一個「新」的文件,如果你的「查詢」條件不符合實際的集合中的任何文件。

如果您的意圖不是更新多個文檔,或許您的使用可能更適合.findOneAndUpdate().findByIdAndUpdate()方法。

只是爲了便籤,$pushAll運營商實際上已經被棄用,最近的MongoDB的版本和首選方式是使用$each修飾符結合$push。這是因爲該功能也以相同的方式與$addToSet運營商共享。預期用途是一次添加「多個」數組項目。

+0

OMG感謝你這麼多我真的很擔心這個問題 – krlosruiz

+0

這個工程!謝謝 –

0

恕我直言,你需要定義單獨的模式爲你的「PRODUCTOS」,並通過「esquemaUsuarios」內部參考它們存儲,它會給你更多的靈活性和節省數據庫存儲,當你需要共享相同的產品

相關問題