由于客户端代码中的错误,mongodb创建了许多“mr.mapreduce ....”集合,如何将它们全部删除(可能是掩码)。
答案 0 :(得分:15)
我在交互式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();
它解决了我的问题。
答案 1 :(得分:3)
当创建它们的连接关闭时,应清除临时map-reduce表:
通过数据库调用map / reduce 命令。数据库创建一个 临时收集以保持输出 操作。这个系列是 在客户端连接时清理 关闭,或明确删除。 或者,可以指定一个 永久输出集合名称。地图 和减少函数写入 JavaScript并在服务器上执行。
如果没有,您可以使用相同的方法删除它们,删除任何其他集合。但它可能会有点重复。
答案 2 :(得分:3)
实现相同目标的另一种方法是这个片段:
db.system.namespaces.find({name: /tmp.mr/}).forEach(function(z) {
try{
db.getMongo().getCollection( z.name ).drop();
} catch(err) {}
});
Pro:它不会尝试将所有命名空间收集到JavaScript数组中。 MongoDB会在太多名称空间上发生段错误。