2010-11-19 37 views

回答

38

您基本上需要創建一個新的上限集合並將文檔複製到它。這可以通過javascript(shell)或您選擇的語言輕鬆完成。

db.createCollection("new", {capped:true, size:1073741824}); /* size in bytes */ 
db.old.find().forEach(function (d) {db.new.insert(d)}); 
db.old.renameCollection("bak", true); 
db.new.renameCollection("old", true); 

注意:只要確保沒有人插入/更新舊的集合,當你切換。如果您在db.eval(「....」)中運行該代碼,它將在運行時鎖定服務器。

有提高現有集合的大小的功能要求:http://jira.mongodb.org/browse/SERVER-1864

40

這是我做的調整上限的集合:

db.runCommand({"convertToCapped": "log", size: 1000000000}); 

我已經有一個封頂集名爲「日誌」 。所以我只是再次運行「convertToCapped」,指定一個新的大小。我沒有嘗試過減少集合的大小。這可能是你需要使用Scott Hernandez的版本。但是,這適用於在不丟失任何數據或索引的情況下增加加蓋收藏的大小。


編輯: @JMichal是正確的。數據被保留,但索引不是,將需要重新創建。

+5

適合縮小收藏的尺寸!這應該是正確的答案。 – 2014-07-23 11:39:55

+2

http://docs.mongodb.org/manual/reference/command/convertToCapped/說: 警告 此命令獲取全局寫鎖,並將阻止其他操作,直到它已完成。 – 2014-10-13 12:40:06

+2

但它不保留索引,都必須重新創建 – 2014-10-16 06:54:57

相關問題