如何调整mongodb的固定集合大小而不丢失数据?
是否有相应的命令或可用的脚本呢?
这是我调整被限制集合大小的做法:
db.runCommand({"convertToCapped": "log", size: 1000000000});
我已经有一个名为"log"的被限制集合。 因此,我只需再次运行"convertToCapped"命令并指定新的大小即可。 我没有尝试过缩小集合的大小。 这可能是您需要使用Scott Hernandez版本的地方。 但这种方法适用于增加被限制集合的大小而不会丢失任何数据或索引。
编辑:@JMichal是正确的。 数据被保留,但索引不会,需要重新创建。
你需要创建一个新的有容量限制的集合,并将文档复制到其中。这可以在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
https://www.mongodb.com/docs/manual/core/capped-collections/#change-a-capped-collection-s-size
6.0 版新功能:
db.runCommand( { collMod: "log", cappedSize: 100000 } )
convertToCapped
和cloneCollectionAsCapped
只支持原始封顶集合创建方法的字节大小选项。当您需要更改最大文档计数时,上面的答案似乎是唯一的方法。 - Furkan MustafaconvertToCapped
命令的文档(https://www.mongodb.com/docs/manual/reference/command/convertToCapped/)指出该命令“将现有的**非封顶**集合转换为同一数据库中的封顶集合”。因此,在我的理解下,它不能应用于已经封顶的集合。我的理解正确吗?或者MongoDB网站上的文档不正确? - fgalan