2013-05-22 73 views
0

考慮收集學生包含以下文件。爲什麼mongodb只更新集合中的第一個匹配文檔?

{name:」Nithin」,age:23} 

{name:」Nithin」,age:25} 

{name:」Nithin」,age:28} 

{name:」Nithin」,age:12} 

我想更新60歲時所有名爲「Nithin」的文檔。 如果我們執行下面的查詢,它只會更新第一個文檔。

db.student.update({name:」Nithin」},{age:60}) 

對於更新所有的文件我必須使用查詢

db.student.update({name:」Nithin」},{age:60},false,true) 

or 

db.student.update({name:」Nithin」},{age:60},multi:true) 

什麼是默認的MongoDB的理由不通過執行db.student.update({名更新所有的文件:」 Nithin「},{age:60})?創建用於更新所有文檔的單獨查詢的動機是什麼?它是否提高了性能?

回答

2

最初,在MongoDB早期(1.1版之前),無法更新多個文檔。這是在1.1.3左右添加的一項功能。

你可以看到它在release notesNew Feature 268

我猜這不是默認啓用與以前的版本向後兼容。

1

這可能並不是真正的原因,但我發現額外的multi參數作爲防止多個記錄意外更新的一種安全措施,當您打算僅更新單個文檔時,就像在SQL上意外執行UPDATE...SET而沒有指定其他約束。

這又是一個假設,但可能並非如此。

0

我想部分原因可能是爲了避免來自SQL世界的人將多文檔更新視爲單獨的事務。

事實上,在長時間更新期間,MongoBD會週期性地控制其他可能修改相同數據集的查詢。

因此,通過顯式設置multi=true你有點承認這個事實(當然,不是真的,但我想這是精神......)

相關問題