Подтвердить что ты не робот

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

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

Есть ли команда для этого, или кто-нибудь может предоставить script?

4b9b3361

Ответ 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 верна. Данные сохраняются, но индексы не подлежат восстановлению.