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

问题描述 投票:0回答:3

为了减少现有集合的大小,我从集合中的文档中删除了一些不需要的字段。之后和之前我运行集合统计信息来检查大小,但它没有改变。我缺少一些东西(比如更新任何东西)来反映我的统计数据中尺寸减小的情况。

我在本地 PC 上运行它,没有任何其他节点。

mongodb mongoose mongodb-query
3个回答
5
投票

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

更漂亮的解释这里

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


2
投票

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

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

0
投票

我知道这是一个老问题,但我会在这里添加以防万一。仔细阅读有关 compact 的文档,因为它会导致其运行的节点停止占用大部分流量,直到完成为止。 之前的所有想法都有其用例,我将添加另一个可能最合适的想法。如果您能够查询要从集合中保留的子集,并且它比整个集合小很多,并且您有大量其他集合,您不想等待从头开始恢复,那么您可以编写子查询到另一个集合,应用索引,完成后计划一个短暂的停机时间(如果需要)并切换集合。

© www.soinside.com 2019 - 2024. All rights reserved.