2013-08-20 45 views
1

蒙戈是否有MongoDB的 - 相當於傳統的更新設置,其中

update emp 
set sal = sal * 1.20 
where empno in (1,2,3); 

注意,我想匹配的記錄SAL等效。

db.users.update(
    { empno: { $in: [1,2,3]} }, 
    { $set: { sal: $matched.sal * 1.20 } }, # Not real syntax 
    { multi: true } 
) 

我查看了文檔,但找不到任何東西。我可以用find-save來做到這一點,但我正在處理一個大集合,多更新將是一個更好的解決方案。

回答

1

在mongo shell中沒有multiply元素這樣的函數。很少有field update運營商,但在你的情況,你需要運行一個自定義腳本forEach

db.users.find({ empno: { $in: [1,2,3]} }).forEach(function(e) { 
    e.sal = e.sal * 1.2; 
    db.users.save(e); 
}); 
+0

謝謝。乘法不是目標。我只想在不修改和保存記錄的情況下進行批量更新。 –

1

不幸的是,這是不可能的MongoDB的。關閉你可以得到與$where運營商,但參考specifically warns反對從$where更新文件。所以,是的,你將不得不一個接一個地獲取文檔並單獨執行更新。