web-dev-qa-db-ja.com

データを失うことなく、mongodbでキャップされたコレクションのサイズを変更するにはどうすればよいですか?

データを失うことなく、mongodbでキャップされたコレクションのサイズを変更するにはどうすればよいですか?

そのためのコマンドはありますか、それとも誰かがスクリプトを提供できますか?

34
Luca Martinetti

基本的に、新しい上限付きコレクションを作成し、それにドキュメントをコピーする必要があります。これは、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

42
Scott Hernandez

これは、キャップされたコレクションのサイズを変更するために私が行うことです。

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

私はすでに「log」という名前の上限付きコレクションを持っています。そのため、新しいサイズを指定して、「convertToCapped」を再度実行します。コレクションのサイズを小さくすることは試していません。それはあなたがスコットヘルナンデスのバージョンを使用する必要があるものかもしれません。ただし、これは、データを失うことなく、上限のあるコレクションのサイズを増やすために機能します またはあなたのインデックス


編集: @ JMichalは正しいです。データは保持されますが、インデックスは保持されないため、再作成する必要があります。

47
Quixrick