2010-11-12 127 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在很多命名空間上發生段錯誤。