如何在不丢失数据的情况下调整mongodb上限集合的大小?

时间:2010-11-19 13:42:25

标签: mongodb nosql

如何在不丢失数据的情况下调整mongodb上限集合的大小?

是否有命令,或者某人可以提供脚本?

2 个答案:

答案 0 :(得分:47)

这就是我为调整加盖的集合所做的工作:

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

我已经有一个名为" log"的封顶集合。所以我只是运行" convertToCapped"再次指定一个新的大小。我没有尝试减少收藏的大小。这可能是您需要使用Scott Hernandez的版本。但这适用于增加上限集合的大小而不会丢失任何数据或索引


编辑: @JMichal是正确的。数据被保留,但索引不是并且需要重新创建。

答案 1 :(得分:40)

您基本上需要创建一个新的上限集合并将文档复制到它。这可以在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