截断一个集合

如何截断MongoDB中的集合,或者有这样的事情?

现在,我必须一次删除6个大集合,并停止服务器,删除数据库文件,然后重新创build数据库和集合。 有没有办法删除数据并保持原样? 删除操作需要很长时间。 我有数百万的collections品。

    5 Solutions collect form web for “截断一个集合”

    您可以使用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),但是你会丢失索引。