Как я могу изменить размер коллекции mongodb без потери данных? - PullRequest
33 голосов
/ 19 ноября 2010

Как я могу изменить размер коллекции mongodb без потери данных?

Есть ли для этого команда или кто-то может предоставить сценарий?

Ответы [ 2 ]

47 голосов
/ 02 апреля 2014

Это то, что я делаю, чтобы изменить размер ограниченных коллекций:

db.runCommand({"convertToCapped": "log", size: 1000000000});

У меня уже есть ограниченная коллекция с именем "log".Поэтому я просто снова запускаю «convertToCapped», указывая новый размер.Я не пробовал это уменьшить размер коллекции.Это может быть то, что вам нужно использовать версию Скотта Эрнандеса.Но это работает для увеличения размера ваших ограниченных коллекций без потери данных или индексов .


РЕДАКТИРОВАТЬ: @JMichal правильно.Данные сохраняются, но индексы нет, и их необходимо будет воссоздать.

40 голосов
/ 19 ноября 2010

Вам нужно создать новую ограниченную коллекцию и скопировать в нее документы.Это можно сделать очень легко в javascript (оболочке) или на вашем языке.

db.createCollection("new", {capped:true, size:1073741824}); /* size in bytes */
db.old.find().forEach(function (d) {db.new.insert(d)});
db.old.renameCollection("bak", true);
db.new.renameCollection("old", true);

Примечание : просто убедитесь, что никто не вставляет / обновляет старую коллекцию при переключении,Если вы запустите этот код в db.eval ("...."), он заблокирует сервер во время его работы.

Существует запрос функции для увеличения размера существующей коллекции: http://jira.mongodb.org/browse/SERVER-1864

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...