我正在连接到远程MongoDB服务器,将其中的所有项目导入本地数据库,然后将其清除。
有更安全,更有效的方法吗?
mongoexport -h 1.2.3.4 -d foo -c bar | mongoimport -d foo -c bar
mongo 1.2.3.4/foo --eval "db.bar.remove()"
mongo 1.2.3.4/foo --eval "db.repairDatabase()" # To free up disk space
远程数据库远小于我导入的数据库,因此复制似乎不是一种选择。
答案 0 :(得分:1)
好吧,我想我会先使用mongoexport / mongoimport切换到使用mongodump/mongorestore。与mongoexport不同,Mongodump更快,并且还将保留所有丰富的BSON数据类型。
此外,命令db.bar.remove()
将按文档浏览您的收集文档并删除每个文档。既然你真的想摆脱一切,你可以通过db.bar.drop()
批发compact
更快地完成这项工作。这要快得多。但是,删除集合也会丢弃为其构建的任何索引,因此您需要在之后重新创建它们。
您不必在每次迁移后运行db.repairDatabase(),因为MongoDB将回收释放的集合中释放的空间。您可以做的是使用usePowerOf2Sizes
(dropping the entire collection)对释放的空间进行碎片整理。此外,您可以尝试使用此集合的{{1}}标志,这有助于MongoDB更有效地重用空间(http://docs.mongodb.org/manual/reference/command/compact/)。
复制不是您正在寻找的。通过复制,我们运行多个服务器,这些服务器都包含相同数据的副本,而不包含数据集的子集。这主要用于灾难恢复和故障转移,对您的情况无济于事。