2011-07-14 159 views
35

多個文檔,我發現下面的腳本:如何更新在貓鼬

Device.find(function(err, devices) { 
    devices.forEach(function(device) { 
    device.cid = ''; 
    device.save(); 
    }); 
}); 

的MongoDB有「多」標誌用於在多個文檔的更新,但我沒能得到這與貓鼬工作。這還不支持,還是我做錯了什麼?

Device.update({}, {cid: ''}, false, true, function (err) { 
    //... 
}); 

回答

56

目前,我認爲,在update()貓鼬也存在一些問題,請參閱: https://groups.google.com/forum/#%21topic/mongoose-orm/G8i9S7E8Erghttps://groups.google.com/d/topic/mongoose-orm/K5pSHT4hJ_A/discussion

但是,請檢查文檔以進行更新:http://mongoosejs.com/docs/api.html(其在Model下)。該定義是:

Model.update = function (query, doc, options, callback) { ... } 

你需要傳遞一個對象中的選項,因此您的代碼將是:

Model.update = function ({}, {cid: ''}, {multi: true}, function(err) { ... }); 

我相信,貓鼬包裹在$設置您的CID,所以這不是就像在mongo shell中運行相同的更新一樣。如果你在shell中運行它,那麼所有文檔將被替換爲一個單一的cid: ''

+0

這也正是我想要的......更新所有設備的CID爲‘’。謝謝 – pkyeck

8

你必須使用多:true選項

Device.update({},{cid: ''},{multi: true});