2015-10-30 201 views
-1

更新兩個不同的領域是否有可能做這樣的事情:的MongoDB /貓鼬:貓鼬在模型

var updateData = { 
    "$set": { 
     content: 'foo' 
    }, 
    "$push":{ 
     versions: { 
     some: 'bar' 
     } 
    } 

}; 

Model.update({},updateData, {}); 

或做我們需要做兩個或兩個以上單獨的更新?

+0

是的,那應該是可以的。 –

+0

我從來沒有見過它的任何地方的例子,總是想知道 –

+0

我試過了,失敗了,我不確定它是否與試圖一次嘗試兩個不同的更新命令有關... –

回答

1

當然只有一個更新,Mongoose本身與它無關,只是直接通過操作。閱讀關於$set的文檔應該對此有所瞭解。

你的語法是有點過了,應該是:

Model.update({},updateData,function(err,numAffected) { 

}); 

當然,如果你想影響多個文件,而不只是第一場比賽(這是默認在這裏),然後通過在「多「:

Model.update({},updateData,{ "multi": true },function(err,numAffected) { 

}); 

.find().save()的建議顯然表明不會在這裏發生了什麼,是完全錯誤的方式來做到這一點。該操作序列意味着觸摸數據庫的「兩個」操作,並且最重要的是數據可能在.find()操作和在.save()中提交的更改之間改變可能會覆蓋該數據。

運營商如$set.update()和相關的方法是原子處理。只有一個與數據庫的聯繫人,這些操作員的要點是「就地」更改數據,而無需將其返回給客戶端進行修改。在評論

一個真實的陳述是簡單地把調試:

mongooose.set("debug",true) 

,然後你會看到實際的聲明通過駕駛者的MongoDB通過。

這只是一個操作,根據提供的參數當然可以影響多個字段甚至多個文檔。