截断一个集合
如何截断MongoDB中的集合,或者有这样的事情?
现在,我必须一次删除6个大集合,并停止服务器,删除数据库文件,然后重新创build数据库和集合。 有没有办法删除数据并保持原样? 删除操作需要很长时间。 我有数百万的collections品。
您可以使用db.collection.drop()
将所有数据放入集合中。
使用mongo
shell的例子:
var dbName = 'nukeme'; db.getSiblingDB(dbName).getCollectionNames().forEach(function(collName) { // Drop all collections except system ones (indexes/profile) if (!collName.startsWith("system.")) { // Safety hat print("WARNING: going to drop ["+dbName+"."+collName+"] in 5s .. hit Ctrl-C if you've changed your mind!"); sleep(5000); db[collName].drop(); } })
值得注意的是,删除一个集合不会释放预先分配的磁盘空间 。 这对您的使用情况可能没有问题; 当插入新数据时,可用空间可供重用。
如果您要删除数据库,则通常不需要显式创build集合,因为将在插入文档时创build集合。
但是,下面是在mongo
shell中使用相同集合名称删除和重新创build数据库的示例:
var dbName = 'nukeme'; // Save the old collection names before dropping the DB var oldNames = db.getSiblingDB(dbName).getCollectionNames(); // Safety hat print("WARNING: going to drop ["+dbName+"] in 5s .. hit Ctrl-C if you've changed your mind!") sleep(5000) db.getSiblingDB(dbName).dropDatabase(); // Recreate database with the same collection names oldNames.forEach(function(collName) { db.getSiblingDB(dbName).createCollection(collName); })
截断一个集合并保持索引的使用
db.<collection>.remove({})
下面的查询将删除集合中的所有logging,并保持原样收集,
db.collectionname.remove({})
创build数据库和集合,然后使用mongodump将数据库备份到bson文件:
mongodump --db database-to-use
然后,当您需要删除数据库并重新创build以前的环境时,只需使用mongorestore:
mongorestore --drop
当您使用命令mongodump时,备份将被保存在当前工作目录中的一个名为dump的文件夹中。
在MongoDB中没有相当于“truncate”操作。 你可以删除所有文件,但是会有O(n)的复杂性,或者删除集合,那么复杂度就是O(1),但是你会丢失索引。