MongoDB удалить коллекцию mapreduce - PullRequest
9 голосов
/ 12 ноября 2010

Из-за ошибки в клиентском коде mongodb создал множество коллекций "mr.mapreduce ....", как удалить их все (возможно, по маске).

Ответы [ 3 ]

15 голосов
/ 12 ноября 2010

Я запускаю скрипт в интерактивной оболочке:

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();

Это решило мою проблему.

3 голосов
/ 10 августа 2011

Еще один способ добиться того же - это фрагмент:

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

Pro: он не будет пытаться собрать все ваши пространства имен в массив JavaScript. Ошибка сегмента MongoDB в слишком многих пространствах имен.

3 голосов
/ 12 ноября 2010

Временная таблица уменьшения таблицы должна быть очищена при закрытии соединения, которое их создало:

карта / уменьшить вызывается из базы данных команда. База данных создает временная коллекция для хранения вывода операция. Коллекция вычистили при подключении клиента закрывается или когда явно сбрасывается. В качестве альтернативы можно указать постоянное имя выходной коллекции. карта и уменьшить функции написаны в JavaScript и выполнить на сервере.

- Документы MongoDB

Если нет, вы можете удалить их, используя тот же метод, что и любую другую коллекцию. Хотя это может стать немного повторяющимся.

...