MongoDB,更新上限集合

时间:2016-01-18 16:28:11

标签: mongodb nosql

有没有人知道在Mongo3.2中更新上限集合的方法?我在2.x工作,我更新了一个集合,基本上删除了所有内容,所以我知道它已被处理。然后这会老化。

当我在3.2中执行相同操作时,我在命令行上收到以下错误。

无法更改上限集合中文档的大小:318!= 40

在这里,您可以看到我正在将文档从318字节缩小到40字节。

有办法做到这一点吗?

4 个答案:

答案 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/

因此,解决方案是创建一个新集合,而不选择有上限的集合(如果这符合您的要求)。可以。