mongodb - 在 Mongodb : use remove or dropDatabase to empty a database? 或两者中?

标签 mongodb

我有一个连接到 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 不再占用大量空间。但是,我想了解发生了什么。

命令removedropDatabase 有什么区别?什么时候应该使用一个,什么时候使用另一个? (我同时运行这两个 - 这只是愚蠢吗?)另外,有谁知道为什么即使在运行 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/

相关文章:

javascript - Route.get() 需要回调函数,但修改服务器路由后得到一个 [object Undefined]

mongodb - 修改内核代码后,是否有更快(<16分钟)编译mongodb源代码的方法?

java - 即使将库添加到 hadoop 文件夹后也找不到 BSONFileInputFormat

arrays - mongodb : search an array of hashes

mongodb - Mongoid 在 ruby​​ 1.9.3 上失败

javascript - 用于查找唯一文档的 Mongoose 查询

javascript - 使用 MongoDB、Express、Node.Js 和 GridFS-stream 存储视频和图片文件

ajax - 如何使用 mongoose.js 合并更新文档?

javascript - 如何使用 node.js 将图像存储在 mongodb 中?

node.js - 蒙哥错误: selector must be a valid JavaScript object