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

Luc*_*tti 33 mongodb nosql

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

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

Qui*_*ick 47

这就是我调整加盖的集合的大小:

db.runCommand({"convertToCapped": "log", size: 1000000000});
Run Code Online (Sandbox Code Playgroud)

我已经有一个名为"log"的Capped Collection.所以我再次在它上面运行"convertToCapped",指定一个新的大小.我没有尝试过减小集合的大小.这可能是你需要使用Scott Hernandez版本的东西.但这适用于增加上限集合的大小而不会丢失任何数据或索引.


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

  • 适用于减少集合的大小!这应该是正确的答案. (5认同)
  • http://docs.mongodb.org/manual/reference/command/convertToCapped/说:警告此命令获取全局写锁定,并将阻止其他操作,直到它完成. (3认同)
  • 但它不保留索引,所有都必须重新创建 (2认同)
  • 看起来 `convertToCapped` 和 `cloneCollectionAsCapped` 仅支持原始上限集合创建方法的字节大小选项。当您需要更改最大文档数时,上述答案的方法显然是唯一的方法。 (2认同)

Sco*_*dez 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);
Run Code Online (Sandbox Code Playgroud)

注意:只需确保在切换时没有人插入/更新旧集合.如果在db.eval("....")中运行该代码,它将在运行时锁定服务器.

有一项功能要求可以增加现有馆藏的规模:http://jira.mongodb.org/browse/SERVER-1864