从文档中删除字段后,MongoDB 集合大小未更改

Posted

技术标签:

【中文标题】从文档中删除字段后,MongoDB 集合大小未更改【英文标题】:Mongo DB collection size not changed after removal of fields from document 【发布时间】:2016-06-07 20:33:45 【问题描述】:

为了减少我现有的集合大小,我从集合的文档中删除了一些不需要的字段。在我运行收集统计信息以检查大小之后和之前,但它从未改变。 我错过了一些东西(比如更新任何东西)来反映我的统计数据中减少的大小,请给我建议。 我在我的本地 PC 上运行它,没有任何其他节点。 谢谢。

【问题讨论】:

2021-06:db.runCommand( compact: "collection-name" )docs.mongodb.com/manual/reference/command/compact 【参考方案1】:

正如 Daniel F 在对该问题的评论中提到的,这在 mongo shell 中对我有用:

use your-database-name
db.runCommand( compact: "your-collection-name" )

【讨论】:

【参考方案2】:

这是正确的行为。 mongo 释放磁盘空间的唯一时间是您删除数据库或进行修复时。 (see here)

更漂亮的解释here

基本上,mongodb 会保留它分配的所有空间,除非并且直到您删除数据库或进行修复。这样做是因为添加空间效率不高,非常耗时。因此,一旦拥有它,它就会保留它并使用创建的空白空间,直到没有剩余空间,然后它会得到更多。

【讨论】:

如果您使用的是副本集,您实际上可以重置集合中的一个节点,它将从其他节点拉取启动同步中的所有数据。那时的数据足迹将比此后的任何时候都要小。然后您可以看到您的数据库实际需要的总空间。此外,这是一种回收空间的便捷方式,因为您可以一次同步一个节点以减少空间,而不会导致副本集脱机。

以上是关于从文档中删除字段后,MongoDB 集合大小未更改的主要内容,如果未能解决你的问题,请参考以下文章

MongoDB update集合字段名修改 $rename

如何从 MongoDB 文档中完全删除字段?

使用 mongoDB 中的聚合删除集合中所有文档的特定字段

Mongodb 特殊索引和集合

MongoDB - TTL 索引 - 未删除的文档

在 MongoDB 中,如果删除了集合,索引也会自动删除吗?