2010-11-12 124 views
9

由于客户端代码的错误,mongodb创建了许多“mr.mapreduce ....”集合,如何将它们全部删除(可能是由掩码)。MongoDB删除mapreduce集合

回答

14

我在交互shell中运行脚本:

function f() { 
    var names = db.getCollectionNames(); 
    for(var i = 0; i < names.length; i++){ 
    if(names[i].indexOf("mr.") == 0){ 
    db[names[i]].drop();}}}; 
f(); 

它解决了我的问题。

+0

复制相同的代码,但没有为我工作:(编辑:名称是不同的。它现在的作品,谢谢。 – theTuxRacer 2010-11-12 11:27:38

+1

好主意。但你可能想解决长期问题的原因。创建(并离开)一批临时集合以进行手动清理可能并不理想。 – 2010-11-12 11:56:49

+1

您应该编写> if(names [i] .indexOf(“tmp.mr。”)== 0){<因为集合的名称类似于tmp.mr.mapreduce_1295256376_56_inc – 2011-01-17 09:53:09

3

临时地图,减少表应该被清理时产生它的连接被关闭:

地图/减少经由数据库 命令调用。该数据库创建一个 临时集合来保存操作的输出 。当客户端连接 关闭时,或者显式删除时,收集是 清理。 或者,您可以指定一个 永久输出集合名称。地图 和减少功能都写在 JavaScript并在服务器上执行。

- MongoDB docs

如果没有,你可以使用这些相同的方法删除任何其他集合中删除它们。但它可能会有点重复。

3

另一种方式来达到同样的事情是这样的片段:

db.system.namespaces.find({name: /tmp.mr/}).forEach(function(z) { 
    try{ 
    db.getMongo().getCollection(z.name).drop(); 
    } catch(err) {} 
}); 

临:它不会尝试所有的命名空间聚集成一个JavaScript阵列。 MongoDB在很多命名空间上发生段错误。