我有一个连接到 Raspi 的传感器,使用 Mongo 收集数据。每隔几天,我都会复制数据库(使用 mongodump
),然后删除 Mongo 文件并重新启动传感器。
我在删除/清空 Mongo 时遇到了一些问题,想了解我做错了什么。
最初,我使用命令:
use [database]
db.[nameOfOnlyCollection].remove({})
清空数据库(它只有一个集合)。使用命令 db.[nameOfOnlyCollection].count()
我可以验证集合是否为空。
然而,即使在此之后,Mongo 仍在 Raspi 上占用大量空间。更具体地说,这些(看似与 Mongo 相关的)示例占用了数个空间:
- /var/lib/mongodb
- /var/lib/mongodb/journal
- /var/log/mongodb
然后我找到了an answer推荐命令 db.dropDatabase()
删除数据库中的所有条目。
我现在同时运行 db.[nameOfCollection].remove({})
和 db.dropDatabase()
,这解决了问题。这意味着,Mongo 不再占用大量空间。但是,我想了解发生了什么。
命令remove
和dropDatabase
有什么区别?什么时候应该使用一个,什么时候使用另一个? (我同时运行这两个 - 这只是愚蠢吗?)另外,有谁知道为什么即使在运行 remove
之后 Mongo 仍然占用大量空间?
任何指向相关阅读的链接将不胜感激。 (但最好阅读“for Dummies”级别的读物。说我是 Mongo 菜鸟将是对真正的 Mongo 菜鸟的侮辱。)
最佳答案
主要区别在于 db.remove({})
会删除所有文档,但您的集合仍然具有索引等元数据。 dropDatabase
从字面上删除整个集合,包括元数据。
如果您正在重新创建集合索引或者您没有它,请使用 dropDatabase
它会更快。
检查这个link了解 db.collection.drop()
与 db.dropDatabase()
如果您正在学习 MongoDb,我建议您阅读此书 book .它还解释了您的用例。
关于mongodb - 在 Mongodb : use remove or dropDatabase to empty a database? 或两者中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49752021/