一次从多个集合中删除内容

时间:2012-03-06 06:16:27

标签: mongodb

有没有办法从多个集合中删除对象?比如在MongoDB中删除这5个集合命令中的所有内容吗?

从Mongo数据库中的每个集合中手动删除是非常耗时的。

2 个答案:

答案 0 :(得分:2)

正如安德鲁所说,没有内置的方法可以做到这一点,但你可以使用Javascript来获得你想要的东西。例如,如果我想快速删除数据库列表(并且很脏,这只是一个概念验证代码示例!):

var deletelist = ["deleteme1", "deleteme2", "deleteme3"]
deletelist.forEach(
    function deletedbs(name) {
        db = db.getMongo().getDB( name );
        db.dropDatabase();
        print(name + " deleted");
    }
)

当然没有错误检查,但是这种服务器端脚本将用于交叉收集和跨数据库功能。如果您想在所有数据库上运行某些东西,那么您可以构建如下列表:

var allDBs = db.getMongo().getDBNames()
for(var name in allDBs){
      db = db.getMongo().getDB( name );
      db.<command to execute on each DB>;
 }

当然,在运行这样的事情时你需要非常非常小心,这样你才能避免破坏你的数据库,所以要进行广泛的测试并谨慎使用:)

有关服务器端JS的更多信息,请查看MongoDB文档:

http://www.mongodb.org/display/DOCS/Server-side+Code+Execution

答案 1 :(得分:1)

实际上,您只需手动删除每个集合中的所有项目:

db.foo1.remove({})
db.foo2.remove({})

另外,如果你关心性能,你可以放弃收集,它应该更快:

db.foo1.drop()
db.foo2.drop()

另一种方法是,如果您经常需要删除这五个集合,请将它们分组到一个数据库中并删除整个数据库:

use dbWithFiveCollections
db.dropDatabase()