我想知道您对以下情况的看法:
提供以下mongo db集合:
收藏大小:192.87GB
总文件数:165.578.552
我想从现在开始删除早于一年的文档。我估计它将占馆藏的一半左右,约有8000万份文档。
所以基本上我有两个问题:
在删除文档之前运行count()
查询以确保完全匹配是否安全?
...->count({timestamp: {$lt: '1534976762'}})
注意:timestamp
未建立索引,我还有另一个字段time
已建立索引,但是我无法使查询在time.sec
上起作用
第二,我可以安全地批量删除多少个文档?我来自MySQL世界,而不是Mongo专家,所以,也许我要采取很多预防措施。这是一个生产数据库。
谢谢!
答案 0 :(得分:1)
> length(unique(motifs))
[1] 1
要保留的文档将它们复制到新的收藏夹,然后删除旧的收藏夹,可能会更快。
要准确计数集合中的文档,您需要使用CountDocuments,因为较旧的find
命令不能在所有情况下都提供准确的计数。正如先前的作者提到的count
在未索引字段上将执行集合扫描,这将影响数据库性能。收集完数据后,可以对同一查询使用deleteMany来删除这些文档。
要确保所计数的文档和已删除的文档集不被更改,可以在transaction内运行countDocuments
和countDocuments
。
答案 1 :(得分:0)
我建议您关闭辅助节点并对其进行计数,获取编号,进行分析,然后执行删除。请记住,删除文档不会将空间释放回OS。相反,mongodb将考虑未来的增长来保留空间
如果您打算对馆藏进行整理,最好将所需文档复制到新馆藏中,并删除现有的文件