2011-10-10 123 views
2

我在我的主文檔中有一個嵌入式圖像文檔,我可以按如下方式進行更新。每次它更新,它只是覆蓋現有的圖像,並沒有將其添加到現有的圖像..我嘗試了「{images.push:image}」,但這是行不通的。語法是什麼?我不確定我是否能夠解釋這個問題。如果沒有,請告訴我是否需要在此添加更多信息。MONGODB mongoose更新node.js中的嵌入式文檔

var image = { 
        img  : new_file_name, 
        orig_img_name : files.source.filename, 
        caption : fields.message, 
        upload_date : new Date() 
       }; 

RentModel.update({'facebook_id':fb_id, 'prop_location.lat':lat, 'prop_location.lng':lng}, {'images':image}, function(err, docs){ 
         if(err) { 
          console.log("Error during friends update"); 
          throw err; 
         } 
         console.log('image updated to database', new_file_name); 
        }); 

回答

4

嘗試find()嵌入的文檔的第一和然後添加image到陣列。

RentModel.find({'facebook_id':fb_id, 'prop_location.lat':lat, 'prop_location.lng':lng}, function (err, item) { 
    if (err) //throw ... 
    if (item) { 
     if (item.images && item.images.length) { 
      item.images.push(image); 
     } 
     else { 
      item.images = [image]; 
     } 

     // save changes 
     item.save(function (err) { 
     if (!err) { 
      // done ... 
     } 
     }); 
    } 
}); 
+0

謝謝。這正是我正在尋找的..會嘗試這..順便說一句,我問一個非常基本的問題,爲什麼你用「!==」而不是「!=」 – user644745

+0

他們是嚴格的「不等於「 - 但我刪除了它們,並更改了代碼以便於理解;) – pkyeck

+0

您的代碼沒問題。我認爲檢查圖像「if(item.images && item.images.length).. else {}」可能沒有必要。我正在做,而不檢查圖像是否有任何數據。只是做item.images.push(圖片);是足夠的,它工作正常。 – user644745