有没有人知道在Mongo3.2中更新上限集合的方法?我在2.x工作,我更新了一个集合,基本上删除了所有内容,所以我知道它已被处理。然后这会老化。
当我在3.2中执行相同操作时,我在命令行上收到以下错误。
无法更改上限集合中文档的大小:318!= 40
在这里,您可以看到我正在将文档从318字节缩小到40字节。
有办法做到这一点吗?
答案 0 :(得分:2)
如mongodb docs中所述
在版本3.2中更改。
如果更新或替换操作更改了文档大小,则 操作失败。
https://docs.mongodb.com/manual/core/capped-collections/
所以你的操作正在改变上限集合的大小,mongodb 3.2 +
中不允许这样做答案 1 :(得分:1)
3.2中不再允许缩小带有限制的集合中的文档。我在文档中没有找到与此相关的任何内容,但https://jira.mongodb.org/browse/SERVER-20529有一个基本原理 (basicalling收缩文件无法回滚)
您唯一的选择是找到相同大小的更新,例如更新布尔值。
答案 2 :(得分:1)
[解决] 这与我合作
创建没有上限的新集合并复制所有文档。
复制,替换您的收藏品名称并粘贴到您的终端。
// replace <mycol> by <your collections name>
db.createCollection( "mycol_temp")
var cur = db.mycol.find()
while (cur.hasNext()) {
mycol = cur.next();
db.mycol_temp.insert(logItem);
}
db.mycol.drop()
db.mycol_temp.renameCollection("mycol")
现在,接受update()或remove()文档。
答案 3 :(得分:1)
封顶的集合是固定大小的集合。因此,当记录更新超过其先前分配的大小时,它将失败。
在3.2版中进行了更改。
如果更新或替换操作更改了文档大小,则该操作将失败。
有关更多信息,请访问链接:https://docs.mongodb.com/manual/core/capped-collections/
因此,解决方案是创建一个新集合,而不选择有上限的集合(如果这符合您的要求)。可以。