Как я могу изменить размер коллекции mongodb без потери данных?
Как изменить размер коллекции mongodb без потери данных?
Есть ли команда для этого, или кто-нибудь может предоставить script?
Ответы
Ответ 1
Вам в основном нужно создать новую ограниченную коллекцию и скопировать документы на нее. Это можно сделать очень легко в javascript (shell) или на выбранном вами языке.
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
Ответ 2
Это то, что я делаю, чтобы изменить размер собранных коллекций:
db.runCommand({"convertToCapped": "log", size: 1000000000});
У меня уже есть Capped Collection с именем "log". Поэтому я снова запустил "convertToCapped", указав новый размер. Я не пробовал его по уменьшению размера коллекции. Это может быть что-то, что вам нужно будет использовать версию Скотта Эрнандеса. Но это работает для увеличения размера ваших закрытых коллекций без потери данных или ваших индексов.
EDIT: @JMichal верна. Данные сохраняются, но индексы не подлежат восстановлению.